身份框架的自定义角色提供者



我想获得一些关于在用户登录到应用程序时创建CustomRoles的想法。我有一个特征模型,看起来像这样:

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

我想根据特征模型中的FeatureCode创建角色,这样当用户登录时,应用程序就会按照分配给该特定用户的角色行事。

我想这样写:

bool value=user.isInRole(FeatureCode)

将根据分配给用户的特征返回真或假。

我使用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;
    }

然后在网络。您可以配置系统使用您的自定义索赔管理器:

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

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

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

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

欢呼弗兰克

相关内容

  • 没有找到相关文章

最新更新