Identity Framework的自定义角色提供程序

时间:2014-06-11 08:14:25

标签: entity-framework-5 asp.net-mvc-5 asp.net-identity roleprovider

每当用户登录应用程序时,我想了解创建CustomRoles的想法。 我的特征模型如下所示:

  public class Feature : AuditableEntity
    {
        [Display(Name = "Code")]
        [MaxLength(50)]
        public string FeatureCode { get; set; }
    }

我想根据要素模型中的FeatureCode创建角色,以便当用户登录应用程序时,行为的角色分配给该特定用户。

我想使用这样的东西:

bool value = user.isInRole(FeatureCode)

将根据为用户分配的功能返回true或false。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我使用ClaimsAuthentionManager类来提供机制来转换具有声明(角色)的传入用户。以下是自定义ClaimsAuthenticationManager的一些示例代码:

public class ClaimsTransformationModule : ClaimsAuthenticationManager
{
    public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
    {
        if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true)
        {
            Claim nameIdentifier = incomingPrincipal.Claims.Where(foo => foo.Type == ClaimTypes.Name).FirstOrDefault();
            var roles = GetRoles(nameIdentifier.Value); // Get the roles from the backend based on the user
            foreach (var role in roles) //This is the part applying roles to the Claim (user)
            {
                ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim(ClaimTypes.Role, role));
            }
            ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim(ClaimTypes.Sid, GetUserId(nameIdentifier.Value)));
        }

        return incomingPrincipal;
    }

然后在Web.config中,您可以将系统配置为使用自定义的Claims Manager:

<system.identityModel>
<identityConfiguration>
  <claimsAuthenticationManager type="ClaimsTransformation.ClaimsTransformationModule, ClaimsTransformation" />

然后获取当前登录用户的角色:

var user = ClaimsPrincipal.Current;
bool isInRole = user.IsInRole(roleName);

但请查看leastprivilege.com网站以获取更多信息。

干杯弗兰克