我正在开发一个 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/