将授权逻辑从ASP.NET Webforms迁移到ASP.NET MVC3

时间:2011-05-08 15:39:56

标签: asp.net asp.net-mvc asp.net-mvc-3

我开始将ASP.NET Webforms应用程序迁移到ASP.NET MVC 3.该应用程序有一个公共区域,所有用户(也是匿名用户)都可以访问该区域,并且只有经过身份验证的用户才能访问这些区域。在一个特定的角色。

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 Webforms中,不再需要进行配置。此授权适用于Customers子文件夹中的所有页面。

将此结构迁移到ASP.NET MVC 3的最佳方法是什么?或者更具体地说:

  • 具有授权设置的此类web.config文件是否仍可在文件夹MVC中运行?
  • 如果没有,是否有另一种方法可以将授权要求应用于文件夹中的所有页面?
  • 我是否仍然可以在单独的文件夹中组织各个区域,尤其是我可以在每个文件夹Controllers下放置单独的ViewsModelsCustomers子文件夹,{{ 1}}等,以保持所有逻辑和标记紧密相连?

感谢您的反馈!

2 个答案:

答案 0 :(得分:3)

  

具有授权设置的此类web.config文件是否仍然可以在基于文件夹的MVC中运行

他们这样做但不应该使用。

  

如果没有,是否有其他方法可以将授权要求应用于文件夹中的所有页面?

在ASP.NET MVC中没有文件夹的概念。有控制器,模型和视图。还有areas。因此,您可以创建一个Customers区域,并拥有一个基本控制器,该区域中的所有控制器都来自该控制器。然后,您将使用[Authorize]属性修饰此基本控制器。这样,所有派生的控制器和动作都需要授权用户才能访问它们。您不需要使用区域来实现此目的。您仍然可以在使用此属性修饰的主区域中拥有一个基本控制器,并且所有控制器都需要从中派生身份验证。

这是一个blog post,你可以看一下ASP.NET MVC中的授权。

答案 1 :(得分:1)

唯一支持的MVC应用程序安全保护方法是将 [授权] 属性应用于每个控制器和操作方法。

以下是Microsoft Rick Anderson博客link

Securing your ASP.NET MVC 3 Application