通过数据库授权角色

时间:2013-06-11 10:43:09

标签: asp.net-mvc

我正在构建一个ASP.net MVC 4应用程序。

过去我使用[Authorize]属性根据用户的角色授权用户。

但是,我现在需要一个更灵活的解决方案,通过更改数据库而不是更改源代码,可以更改角色授权。

有人可以推荐一种合适的方法吗?

我已经考虑过覆盖OnAuthorize方法,但显然由于输出缓存问题,不建议这样做。

2 个答案:

答案 0 :(得分:0)

你可以这样做,我们一直在我们的应用程序中使用它

[AttributeUsageAttribute
        (AttributeTargets.Class | AttributeTargets.Struct |
        AttributeTargets.Constructor | AttributeTargets.Method, Inherited = false)]
    public class RequirePermissionsAttribute : ActionFilterAttribute, IAuthorizationFilter
    {
// Use inbuilt methods

// OnAuthorization // HandleUnauthorizedRequest // OnCacheAuthorization     }

        [RequirePermissions(PermissionItems.ViewThisPage)]
        public ActionResult Index()
        {
}

答案 1 :(得分:0)

不确定我是否正确理解您的要求,但您可以有两个级别的角色,数据模型类似于:

User -in-> Role -has-> Permission

使用用户和角色之间以及角色和权限之间的m-n关系。

如果这样做,您的权限可以非常细粒度和稳定,而角色可以粗粒度并灵活地映射到权限集。

实现此目的的一种方法是简单地编写一个自定义RoleProvider来执行加入Users-Roles-Permissions并将权限作为应用程序角色返回。

如果这样做,您可以使用标准Authorize属性,指定一个细粒度的权限名称,而不是粗粒度的角色名称,例如:

[Authorize(Permissions.ViewCustomers)]