我正在构建一个 ASP.net MVC 4 应用程序。
过去,我使用 [Authorize] 属性根据用户的角色授权用户。
但是,我现在需要一个更灵活的解决方案,其中可以通过更改数据库而不是更改源代码来更改角色授权。
谁能推荐一个合适的方法来做到这一点?
我已经研究过覆盖 OnAuthorize 方法,但由于输出缓存问题,显然不建议这样做。
我正在构建一个 ASP.net MVC 4 应用程序。
过去,我使用 [Authorize] 属性根据用户的角色授权用户。
但是,我现在需要一个更灵活的解决方案,其中可以通过更改数据库而不是更改源代码来更改角色授权。
谁能推荐一个合适的方法来做到这一点?
我已经研究过覆盖 OnAuthorize 方法,但由于输出缓存问题,显然不建议这样做。
你可以做这样的事情,我们一直在我们的应用程序中使用它
[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()
{
}
不确定我是否正确理解了您的要求,但您可以有两个级别的角色,数据模型类似于:
User -in-> Role -has-> Permission
用户与角色之间以及角色与权限之间具有 mn 种关系。
如果这样做,您的权限可以非常细粒度和稳定,而角色可以粗粒度并灵活地映射到权限集。
实现这一点的一种方法是简单地编写一个自定义RoleProvider,它执行 join Users-Roles-Permissions 并将权限作为应用程序角色返回。
如果您这样做,您可以使用标准Authorize
属性,指定您的细粒度权限名称之一,而不是粗粒度的角色名称,例如:
[Authorize(Permissions.ViewCustomers)]