MVC [授权]加上来自字符串的角色

时间:2012-04-03 19:08:47

标签: model-view-controller authorize

嘿,我有点想法,但问题是我无法做到这一点。

在MVC中我们可以使用[Authorize]来保护"一些动作/控制器,我们可以进行下一步并为角色和用户提供一些延迟。

[Authorize(Roles="Boss", User="Secretary"]

这种良好的工作,但在现实生活中有点不好,我们不知道谁有权利这一点。因此,想法是制作角色和用户的字符串,然后再授权使微软变得神奇。

[Authoize(Role=RoleString(), User=UserString())]

当然,它不起作用,如何使这项工作?

1 个答案:

答案 0 :(得分:0)

问题是AuthorizeAttribute期望User和Role字符串都有一个常量。您需要创建类似this blog post中的CustomAuthorizeAttribute。

因此,假设您有一个存储在web.config中的字符串,如下所示:

<add key="authorizedUsers" value="Dave,Chuck,Sally" />

然后你有自定义的authorize属性,如下所示:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public IAuthorizationService _authorizationService { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var user = httpContext.User;
        if (!user.Identity.IsAuthenticated)
        {
            return false;
        }

        var users = System.Configuration.ConfigurationManager.AppSettings["authorizedUsers"].Split(',');
        if users.Contains(user.Identity.Name)
        {
            return true;
        }

        return _authorizationService.Authorize(httpContext);
    }
}

请注意,我把它快速地放在一起,所以没有经过测试。您可以轻松地修改它以从数据库中获取用户名或组名,以使其完全动态化。