0

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

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

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

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

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

4

2 回答 2

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()
        {
}
于 2013-06-11T11:14:01.027 回答
0

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

User -in-> Role -has-> Permission

用户与角色之间以及角色与权限之间具有 mn 种关系。

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

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

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

[Authorize(Permissions.ViewCustomers)]
于 2013-06-11T11:23:57.570 回答