【问题标题】:Authorize roles via database通过数据库授权角色
【发布时间】:2013-06-11 19:23:57
【问题描述】:

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

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

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

谁能推荐一个合适的方法来做到这一点?

我已经研究过重写 OnAuthorize 方法,但由于输出缓存的问题,显然不建议这样做。

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

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

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

//开启授权 //处理未授权请求 //OnCacheAuthorization }

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

【讨论】:

    【解决方案2】:

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

    User -in-> Role -has-> Permission
    

    在用户和角色之间以及角色和权限之间具有 m-n 关系。

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

    实现这一点的一种方法是简单地编写一个自定义RoleProvider,它执行连接用户-角色-权限并将权限作为应用程序角色返回。

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

    [Authorize(Permissions.ViewCustomers)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-11
      • 2015-05-10
      • 2018-11-17
      • 1970-01-01
      • 2020-12-07
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多