是否需要角色提供程序实现?

时间:2014-10-08 20:29:04

标签: c# asp.net-mvc-4

我正在努力完全理解在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"
}

如果不是我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果你所做的只是简单的角色检查,那么自定义角色提供者可能有点过分(角色提供者也提供了管理角色本身的工具)。你最终会得到一个充满

的课程
throw new NotImplementedException();

相反,请考虑创建自定义用户主体。 IPrincipal接口定义了一个返回bool的IsInRole方法。您可以在此处进行自定义角色检查。自定义用户主体的优点是,现在所有内置的ASP.NET角色检查好东西都应该&#34;只是工作&#34;只要您在生命周期中尽早用自定义用户替换默认用户主体对象。

This SO answer有一个我见过的使用自定义用户主体和MVC应用程序的最佳示例。