2011-05-08 87 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