有人对在 ASP.Net MVC 网站中执行记录级授权同时保持关注点分离的好方法有什么建议吗?
使用PrincipalPermission,您可以使用以下方法修饰方法:
PrincipalPermission(SecurityAction.Demand, Role = "GroupLeader")
要求该页面的任何访问者都是固定角色“GroupLeader”的成员。
或者,您可以使用以下方法修饰方法:
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "Manage", Resource = "Group")]
要求一般允许该页面的任何访问者管理组。
然而,这些都没有真正解决用户可能有权编辑某些组但无权编辑其他组的情况。据我所知,即使我实现了自定义ClaimsAuthorizationManager
,无法访问方法参数以进行条件授权。
此外,上面的两种方法都只是抛出一个SecurityException
如果用户没有访问权限,而不是允许一种方法将用户优雅地重定向到一个页面,该页面解释发生了什么以及他们可能会做什么来获得必要的授权。
显然,我也意识到我可以将授权逻辑编码到方法本身中并相应地重定向,但如果可能的话,我宁愿将其分开,并保持方法代码干净,以便仅处理实际处理请求,并且能够在可以更普遍应用的框架内工作。
那么,是否有一种“开箱即用”的方法来处理这种情况,或者我是否必须实现自定义IAuthorizationFilter
?我认为我可以处理记录级别的授权和优雅的重定向,但是在方法级别没有任何参数,这本质上将是一个巨大的过程if ... else if
陈述。