在ASP.NET MVC Identity中,Users和Roles的关系数据保存在AspNetUserRoles表中,该表有两个字段:UserId,RoleId,但我想在此表中添加其他字段,例如department字段。 / p>
因此,如果用户登录不同的部门,他将拥有不同的角色。 谁知道怎么做?提前谢谢!
答案 0 :(得分:2)
我建议您调查ASPNet用户声明。您可以使用身份管理器为用户分配不同的声明,并根据您允许他访问的用户的声明类型。创建一个自定义声明属性,该属性将放置在各种控制器之上以验证用户身份。这必须根据您的需求实施。然后,自定义属性将在控制器执行之前触发,如果允许使用,则他将通过。否则返回到您选择的错误页面。
示例属性用法
[ClaimsAuthorize(ClaimsData.EditAddress)]
public ActionResult CitiesPartial()
属性身份验证
public class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
private readonly string _claimType;
public ClaimsAuthorizeAttribute(string type)
{
_claimType = type;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
var user = (ClaimsPrincipal)HttpContext.Current.User;
if (user.HasClaim(_claimType, "True"))
{
base.OnAuthorization(filterContext);
}
else
{
HandleUnauthorizedRequest(filterContext, _claimType + " Not Allowed ");
}
}
protected void HandleUnauthorizedRequest(AuthorizationContext filterContext, string message)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "ClaimNotAuthorized" },
{ "controller", "Home" },
{"errorMessage", message }
});
}
public static bool AuthorizedFor(string claimType)
{
var user = (ClaimsPrincipal)HttpContext.Current.User;
return user.HasClaim(claimType, "True");
}
}
希望这会有所帮助。