我想获得一些关于在用户登录到应用程序时创建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网站以获取更多信息。
欢呼弗兰克