ASP.NET MVC标识:如何扩展AspNetUserRoles表

时间:2015-07-10 17:56:01

标签: asp.net-mvc asp.net-identity

在ASP.NET MVC Identity中,Users和Roles的关系数据保存在AspNetUserRoles表中,该表有两个字段:UserId,RoleId,但我想在此表中添加其他字段,例如department字段。 / p>

因此,如果用户登录不同的部门,他将拥有不同的角色。 谁知道怎么做?提前谢谢!

1 个答案:

答案 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");
    }
}
希望这会有所帮助。