我正在构建一个ASP.net MVC 4应用程序。
过去我使用[Authorize]属性根据用户的角色授权用户。
但是,我现在需要一个更灵活的解决方案,通过更改数据库而不是更改源代码,可以更改角色授权。
有人可以推荐一种合适的方法吗?
我已经考虑过覆盖OnAuthorize方法,但显然由于输出缓存问题,不建议这样做。
答案 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)]