【问题标题】:Best approach to user roles with an intranet application使用 Intranet 应用程序处理用户角色的最佳方法
【发布时间】:2011-05-03 18:53:59
【问题描述】:

我正在开发一个 ASP.NET MVC Intranet 网站,它需要有几个不同的用户角色(管理员、编辑器、作者等),并且后端使用 SQL Server。我阅读了 scottgu 的 this post 关于基于角色的安全性,并将其作为起点。我遵循的步骤是:

使用 asp_regsql.exe 应用程序配置数据库 设置认证方式为windows

<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
{
    .
    .
    .
}

在这一点上这一切似乎都有效,但我想知道是否有更好的方法来处理角色,或者这种方法是否存在问题。很容易说服自己该方法是一种好方法,因为它有效,但如果这不是解决问题的最佳方法,我想现在采取不同的方法,而不是以后。在其他地方,我读到有人说这是“黑客”,但从未真正说明他为什么不以这种方式解决问题。你的意见?你有更好的办法来解决这个问题吗?

【问题讨论】:

    标签: asp.net-mvc-3 roles


    【解决方案1】:

    在我的一些生产 MVC 应用程序中,我只是使用内置的 sql 角色提供程序。它开箱即用,您的 MVC3 模板将被配置为已经使用它。只需从 Visual Studio 中打开管理站点并管理安全性并将您的角色、用户、用户添加到角色等,仅此而已。不要使用您的 web.config 来管理哪些角色可以访问哪些 URI,在 MVC 中反复建议不要这样做,因为多个 uri 可能会到达单个路由,因此您使用(就像您所做的那样) Authorize 属性与自动角色管理相结合,这就是您所需要的。这很简单。

    【讨论】:

      【解决方案2】:

      有两个值得一提的选择:

      1. 在 Web 配置中配置基于角色的安全权限。这集中了您的安全配置,但必须更新它以反映您的路径/路由,因此涉及一些手动维护
      2. 在数据库中配置基于角色的安全性并创建自定义操作过滤器以根据登录用户读取、缓存和应用这些角色。这是动态的,但涉及更多一些,因为您可能必须创建一个管理屏幕来编辑配置。

      如果您需要这些示例,请告诉我,我可以为您提供链接。

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 2012-01-16
        • 2020-05-14
        • 2023-04-05
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        相关资源
        最近更新 更多