2011-05-03 78 views
4

我正在开发一个需要有几个不同用户角色(管理员,编辑器,编写者等)和后端使用SQL Server的ASP.NET MVC Intranet网站。我通过scottgu读取了this post关于基于角色的安全性,并以此为出发点。我遵循的步骤是:用户角色与Intranet应用程序的最佳方法

使用asp_regsql.exe应用 设置的认证方式为窗口

<authentication mode = "Window" /> 

添加一个连接字符串项的Web.config中配置一个数据库,

<connectionStrings> 
    <add name="SqlRoleManagerConnection" 
     connectionString="Data Source=localhost; Initial Catalog=aspservicedb; Integrated Security=SSPI;" /> 
</connectionStrings> 

向Web.config部分添加了一个roleManager条目,

<roleManager enabled="true" defaultProvider="sqlRoleManager"> 
    <providers> 
    <clear /> 
    <add name="sqlRoleManager" type="System.Web.Security.SqlRoleProvider" 
     connectionStringName="SqlRoleManagerConnection" 
     applicationName="MyApplication" /> 
    </providers> 
</roleManager> 

增加了一些角色代码到的Global.asax.cs文件的Application_Start()方法,

if (!Roles.RoleExists("Editor")) 
{ 
    Roles.CreateRole("Editor"); 
} 
if (!Roles.RoleExists("Writer")) 
{ 
    Roles.CreateRole("Writer"); 
} 
if (!Roles.RoleExists("SiteAdmin")) 
{ 
    Roles.CreateRole("SiteAdmin"); 
    Roles.AddUserToRole("MYCOMPUTER\\Matt", "SiteAdmin"); 
} 

修改了我的控制器使用角色:

[Authorize(Roles = "SiteAdmin")] 
public class SiteAdminController : Controller 
{ 
    . 
    . 
    . 
} 

而这一切似乎在这个工作但我想知道是否有更好的方法来处理角色,或者如果这种方法存在问题。很容易让自己相信这种方法是一个很好的方法,因为它是有效的,但如果这不是解决问题的最佳方法,我想采用不同的方法现在而不是稍后。在别的地方,我会看到有人说这是“黑客”,但从来没有真正确定他为什么不会以这种方式解决问题。你的想法?你有更好的解决办法吗?

回答

3

在我的一些生产MVC应用程序中,我只是使用内置的sql角色提供程序。它可以工作,您的MVC3模板将被配置为已经使用它。只需在Visual Studio中打开管理网站,管理安全性并将角色,用户,用户添加到角色等等,就这些了。不要使用web.config来管理哪些角色可以访问哪些URI,因为不止一个uri可能会使用单个路由,所以这一直被推荐反复使用以避免在MVC中使用,因此您可以使用(就像您一样)Authorize属性与自动角色管理一起使用,这就是您所需要的。这很简单。

2

那么有两种选择值得一提:

  1. 配置你的角色就在web配置为基础的安全。这集中了您的安全配置,尽管它必须更新以镜像您的路径/路由,因此需要一些手动维护
  2. 在数据库中配置基于角色的安全性并创建自定义Action Filter来读取,缓存和应用这些基于登录用户的角色。这是动态的,但涉及更多一点,因为您可能必须创建管理员屏幕才能编辑配置。

让我知道如果你需要这些例子,我可以链接你。

相关问题