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

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中工作?
  • 如果不行,是否还有其他方法可以将授权要求应用到文件夹中的所有页面上?
  • 我是否仍然可以将各个区域组织在不同的文件夹中,特别是我是否可以将单独的ControllersViewsModels子文件夹放置在每个文件夹CustomersSuppliers等下面,以使所有逻辑和标记紧密结合?
感谢您的反馈!

1
你可以查看 http://prodinner.codeplex.com 示例,了解如何在 MVC 中使用授权。 - Omu
2个回答

3

这些带有授权设置的web.config文件在MVC中仍然有效吗?

它们仍然有效,但不应该使用。

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

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

这里是一个关于ASP.NET MVC中授权的博客文章,您可以参考一下。


如果需要更具体的行为,您还可以创建自己的自定义授权属性。 - CRice
谢谢!我会选择“区域”路线,并手动为每个控制器应用[Authorize]属性。这很简单,对于我的应用程序规模来说已经足够好了。 - Slauma
在WebForms中,我们根据授权逻辑将站点结构分成文件夹,因为这样易于配置。但是在MVC中,您有许多解决授权安全问题的方法,并且应该进行逻辑划分。如果只有少数页面供具有特定角色的授权用户使用-最好创建特殊控制器而不是区域和基本控制器。如果某些操作应该对多个角色可用-可以将页面合并到一个控制器中。不要使用带有角色属性和区域的一堆基本控制器作为黄金锤子。考虑更详细的[Authorize]用法。 - David Levin

1

谢谢,这是一篇非常有用的博客文章! - Slauma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接