我正在开发一个需要有几个不同用户角色(管理员,编辑器,编写者等)和后端使用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
{
.
.
.
}
而这一切似乎在这个工作但我想知道是否有更好的方法来处理角色,或者如果这种方法存在问题。很容易让自己相信这种方法是一个很好的方法,因为它是有效的,但如果这不是解决问题的最佳方法,我想采用不同的方法现在而不是稍后。在别的地方,我会看到有人说这是“黑客”,但从来没有真正确定他为什么不会以这种方式解决问题。你的想法?你有更好的解决办法吗?