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

C# 是否需要角色提供程序实现?,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我正在努力完全理解在MVC4应用程序中实现windows身份验证和基于角色的授权方案的正确方法。当用户访问(intranet)网站时,我当前使用以下方法对照数据库表检查用户名 List<string> permissionList = PermissionBo.GetUserPermissionsList(PermissionBo.ParseUserName(User.Identity.Name)); Permissions permissions = new Pe

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

    List<string> permissionList = 
PermissionBo.GetUserPermissionsList(PermissionBo.ParseUserName(User.Identity.Name));
    Permissions permissions = new Permissions(permissionList);
我觉得这可能是一个不正确的方法来实现这一点,但我不知道我会错在哪里。这样就可以开始使用authorize属性了吗

[Authorize(Roles="UtilitiesToolAdmin")]
public static void Foo()
{
 return "Bar"
}

如果不是,我缺少什么?

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

throw new NotImplementedException();

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


这是我见过的将自定义用户主体用于MVC应用程序的最佳示例之一。

使用Authorize属性是您应该做的。唯一不使用Authorize的时间是在您必须以编程方式确定访问权限的情况下。我将尝试澄清我的问题,但我知道我想使用Authorize属性,但是我不清楚是否像我所做的那样以编程方式向用户添加角色是“正确的”
throw new NotImplementedException();