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

本文关键字:程序 实现 角色 是否 | 更新日期: 2023-09-27 18:25:56

我有点难以完全理解在MVC4应用程序中实现windows身份验证和基于角色的授权方案的正确方法。当用户访问(内联网)网站时,我目前有以下方法根据数据库表检查用户名

    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"
}

如果不是,我还缺少什么?

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

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

throw new NotImplementedException();

相反,可以考虑创建一个自定义用户主体。IPrincipal接口定义了一个返回bool的IsInRole方法。这就是您要进行自定义角色检查的地方。自定义用户主体的优点是,现在所有内置的ASP.NET角色检查功能都应该"正常工作",只要您在生命周期中尽早用自定义用户主体对象替换默认用户主体对象即可。

这个SO答案是我见过的在MVC应用程序中使用自定义用户主体的最好例子之一。