如何在asp.net MVC应用程序中执行细粒度访问控制
本文关键字:执行 细粒度 访问控制 应用程序 MVC asp net | 更新日期: 2023-09-27 17:53:12
其他人如何在MVC应用程序中执行细粒度访问控制?也就是说,一个用户可能与多个对象相关,并且对每个对象有不同的访问要求。这可以用asp.net身份声明/角色来实现吗?还是说我得扮演我自己的角色?
如果我需要推出我自己的,有什么设计模式我可以遵循吗?
毫无疑问有很多方法可以做到这一点,但是asp.net-mvc导致了AuthorizeAttribute的可扩展性,例如:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class ActionPermissionAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
// Override OnAuthorization, not AuthorizeCore as AuthorizeCore will force user login prompt rather than inform the user of the issue.
var controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
var action = filterContext.ActionDescriptor.ActionName;
bool authorised = ... // Check permissions here
if (!authorised)
throw new UnauthorizedAccessException("You are not authorised to perform this action.");
base.OnAuthorization(filterContext);
}
}
这可以应用于控制器(或作为基本控制器),所以不需要在每个动作上。
实际的检查权限可以像你想要的那样简单或复杂-例如数据库中的存储控制器+动作+活动目录组将允许权限动态更改。