如何在asp.net MVC应用程序中执行细粒度访问控制

本文关键字:执行 细粒度 访问控制 应用程序 MVC asp net | 更新日期: 2023-09-27 17:53:12

其他人如何在MVC应用程序中执行细粒度访问控制?也就是说,一个用户可能与多个对象相关,并且对每个对象有不同的访问要求。这可以用asp.net身份声明/角色来实现吗?还是说我得扮演我自己的角色?

如果我需要推出我自己的,有什么设计模式我可以遵循吗?

如何在asp.net MVC应用程序中执行细粒度访问控制

毫无疑问有很多方法可以做到这一点,但是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);
    }
}

这可以应用于控制器(或作为基本控制器),所以不需要在每个动作上。

实际的检查权限可以像你想要的那样简单或复杂-例如数据库中的存储控制器+动作+活动目录组将允许权限动态更改。