6

我正在尝试创建自己的 [Authorize] 属性,以便我可以使用自己的授权逻辑来拥有分层角色。

如果有人[Authorize(Roles = "Admin")]在控制器或操作上执行我如何在我的 AuthorizeCore 函数中获取字符串“Admin”?

我正在使用这段代码:

public class Authorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        //authorize role logic
            if (true)
                return true;

        return false;
     }
    }

MVC4、.net 4.5、c#、VS 2012

4

3 回答 3

9

这是您面临的常见问题。

这篇文章中的建议应该在 MVC4 中工作,因为它在 MVC 3 中工作: - ASP.NET MVC - 角色提供者的替代品?

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        bool isAdmin;
        if(Roles.Contains("Admin"))
           isAdmin = true;

        return isAdmin ;
    }
于 2012-12-13T21:35:08.223 回答
1

角色是公共财产。你应该能够做到这一点:

public class Authorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {

        if(Roles.Contains("MyRole"))
           return true;

        return false;
    }
}

或者你需要做什么

于 2012-12-13T21:35:30.397 回答
0

如果您需要获取允许的角色列表,您可以简单地获取 Roles 属性。它将列出在属性装饰中指定的字符串。

public class Authorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var allowedRoles = Roles;
    }
}

您可以在AuthorizeAttribute 定义中看到这一点

于 2012-12-13T21:43:33.553 回答