我正在努力完全理解在Windows MVC应用程序中实现Windows身份验证和基于角色的授权方案的正确方法。当用户访问(intranet)网站时,我目前有以下方法检查用户名对照数据库表
List<string> permissionList =
PermissionBo.GetUserPermissionsList(PermissionBo.ParseUserName(User.Identity.Name));
Permissions permissions = new Permissions(permissionList);
然后以下if状态为用户对象添加角色:
if (permissions.IsAdmin)
{
if(!Roles.RoleExists("UtilitiesToolAdmin"))
{
Roles.CreateRole("UtilitiesToolAdmin");
}
if(!Roles.IsUserInRole(User.Identity.Name, "UtilitiesToolAdmin"))
{
Roles.AddUsersToRole(new string[] { User.Identity.Name }, "UtilitiesToolAdmin");
}
}
我觉得这可能是一个不正确的方法来实现这个,但我不知道我哪里出错了。这是否足以开始使用authorize属性,如下所示:
[Authorize(Roles="UtilitiesToolAdmin")]
public static void Foo()
{
return "Bar"
}
如果不是我错过了什么?
答案 0 :(得分:1)
如果你所做的只是简单的角色检查,那么自定义角色提供者可能有点过分(角色提供者也提供了管理角色本身的工具)。你最终会得到一个充满
的课程throw new NotImplementedException();
相反,请考虑创建自定义用户主体。 IPrincipal接口定义了一个返回bool的IsInRole方法。您可以在此处进行自定义角色检查。自定义用户主体的优点是,现在所有内置的ASP.NET角色检查好东西都应该&#34;只是工作&#34;只要您在生命周期中尽早用自定义用户替换默认用户主体对象。
This SO answer有一个我见过的使用自定义用户主体和MVC应用程序的最佳示例。