2011-05-08 82 views
3

我開始將ASP.NET Webforms應用程序遷移到ASP.NET MVC 3.應用程序有一個公共區域,所有用戶都可以訪問該區域(匿名用戶)和幾個區域,這些區域只能由具有特定角色的經過身份驗證的用戶訪問。將授權邏輯從ASP.NET Webforms遷移到ASP.NET MVC3

該項目的WebForms組織像這樣:

Root folder -> contains all public pages 
| 
--- Private subfolder -> contains a few pages for ALL authenticated users 
     | 
     --- Customers subfolder -> contains pages for users in role "Customer" 
     --- Suppliers subfolder -> contains pages for users in role "Supplier" 
     --- Internals subfolder -> contains pages for users in role "Internal" 
      | 
      --- Admins subfolder -> contains pages for users in role "Admin" 
     etc. 

目前的授權是由web.config文件,這是在不同的子文件夾管理。例如,該子文件夾Customers包含以下web.config:需要

<configuration> 
    <system.web> 
     <authorization> 
      <allow roles="Customer" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</configuration> 

在ASP.NET Web表單沒有更多的配置即可。此授權適用於Customers子文件夾中的所有頁面。

將此結構遷移到ASP.NET MVC 3的最佳方式是什麼?或更具體地說:

  • 做這樣的web.config具有授權設置的文件仍然在MVC文件夾的基礎上工作?
  • 如果沒有,是否有另一種方法來將授權要求應用於文件夾中的所有頁面?
  • 我還可以組織不同區域在不同的文件夾,特別是可以把我個人ControllersViews,下的每個文件夾CustomersSuppliersModels子文件夾,以保持所有的邏輯和標記併攏?

感謝您的反饋!

+1

你可以看看http://prodinner.codeplex.com樣品,以瞭解如何在MVC使用授權 – Omu 2011-05-08 18:27:16

回答

3

做與授權設置這樣的web.config文件中的MVC仍然工作文件夾的基礎上

他們這樣做,但不應該使用。

如果沒有,是否有另一種方法來將授權要求應用於文件夾中的所有頁面?

在ASP.NET MVC中沒有文件夾的概念。有控制器,模型和視圖。還有areas。因此,您可以創建一個Customers區域並擁有一個基本控制器,該區域中的所有控制器都來自該區域。然後,您將使用[Authorize]屬性修飾此基礎控制器。通過這種方式,所有派生的控制器和操作都需要授權用戶訪問它們。你不需要使用一個區域來實現這一點。您仍然可以在用此屬性裝飾的主區域中擁有一個基礎控制器,並擁有所有需要進行身份驗證的控制器。

這裏是blog post你可以看看ASP.NET MVC中的授權。

+0

您也可以創建自己的自定義授權屬性如果需要更具體的行爲。 – CRice 2011-05-09 02:37:35

+0

謝謝!我將去「區域」路線,並手動將'[Authorize]'屬性應用於每個控制器。這對於我的應用程序的大小來說很簡單。 – Slauma 2011-05-09 14:52:49

+0

在WebForms中,我們根據授權邏輯將網站結構分爲多個文件夾,因爲它變得易於配置。但是在MVC中,你有很多方法來解決授權安全問題,並且你應該邏輯分割。如果沒有特定角色的授權用戶只有少量頁面 - 最好創建專用控制器而不是區域和基礎控制器。如果某些操作應該可用於多個角色 - 您可以在1個控制器中合併頁面。不要使用一堆帶角色屬性和區域的底座控制器作爲黃金悍馬。想想更詳細的使用[Authorize] – 2011-06-04 07:41:38

1

唯一支持的辦法,以確保你的MVC應用程序是爲[授權]屬性應用到每個控制器和行動方法。

這裏是link微軟裏克·安德森的博客Securing your ASP.NET MVC 3 Application

+0

謝謝,這是一篇非常有用的博文! – Slauma 2011-05-09 14:46:23