考虑到我有具有基于策略的授权的 .NET 控制器:
public class ImportantController: Controller {
[HttpGet]
[Authorize(Policy = "CanAccessVIPArea")]
public IActionResult ShowInformation() {
...
return OK(VipData);
}
[HttpPost]
[Authorize(Policy = "CanChangeVIPData")]
public IActionResult SaveInformation([FromBody] VipData) {
...
return CreatedAtAction(...);
}
}
显然,真实的例子要复杂得多。如果我的简化导致过多的虚构,我深表歉意。此外,真正的应用是带有 Angular 前端的 SPA;但我认为这对这个问题没有任何影响。
当用户调用时,ShowInformation()我会显示大量数据。在那个页面上,我有Save调用SaveInformation(). 授权中间件检查正确的策略,一切正常。
问题是当用户按下保存时,她输入了大量数据,却发现她没有保存权限。很明显,导致体验不好。我想检查用户调用ShowInformation时调用的中间件中SaveInformation的权限。我不想检查硬编码策略,因为它在服务器上并且可以更改(我们有非常复杂的权限管理系统,可以在运行时操作权限)。的调用与 Angular 服务在同一个 Angular 服务中,并且很容易检查...SaveInformationShowInformation
我想/api/SaveInformation?dryrun在授权中间件成功或失败后调用类似的方法来短路管道。