【发布时间】: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