MVC自定义授权属性以在当前上下文中验证当前用户

时间:2014-12-15 18:33:13

标签: asp.net-mvc authentication roles

我用于自定义授权属性,如

public class AdminAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return (base.AuthorizeCore(httpContext) && User.IsCurrentUserAdmin());
    }
}

如何检查动作是否是当前用户

作为一个例子:

    [OnlyYouself]
    public ActionResult ViewUser(int userId)
    {
        ...
    }

表示userId =当前用户

否则重定向到上一个视图

2 个答案:

答案 0 :(得分:1)

您可能希望构建如下所示的自定义属性:

public class AllowCurrentUserAttribute: AuthorizeAttribute
{
    public string Field { get; set; }
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        return (base.AuthorizeCore(httpContext) && filterContext.HttpContext.User.Identity.Name == filterContext.HttpContext.Request.QueryString[Field];
}

然后像这样使用它:

[AllowCurrentUser(Field = "userId")]
public ActionResult ViewUser(int userId)
{
    ...
}

但是,可能有更好的方法来检查请求属性。此外,您可能希望默认值为" id"对于该字段,假设您使用默认的MVC路由。如果您的id字段被称为其他内容,则您将要更改它。

答案 1 :(得分:0)

actionContext.RequestContext.Principal.Identity