asp.net-mvc-3 - 使用 Intranet 应用程序实现用户角色的最佳方法

标签 asp.net-mvc-3 roles

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

使用 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");
}

修改我的 Controller 以使用角色:

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

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

最佳答案

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

关于asp.net-mvc-3 - 使用 Intranet 应用程序实现用户角色的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5874239/

相关文章:

c# - 如何使用 EF 在 MVC3 中包含另一个表?将数据检索到列表中

php - 在 laravel 5.6 中找不到特征 'App\HasRoles' 错误

c# - 如何访问字段的 System.ComponentModel.DataAnnotations 显示名称属性

c# - ASP.Net MVC 3 中的文档查看器

mysql - Dapper 找不到打开的连接 MVC3

php - 如何将数据库角色添加到 FOSUserBundle

c# - 我应该在 Web.config 文件中为多个页面添加多个 <location> 元素吗

SQL 2005 数据库角色和安全

permissions - 德鲁帕尔 6 : How do I allow a specific role to edit only content of a specific type?

c# - 如何构建我的网站的移动(平板电脑)友好版本?