我正在尝试向我的.net核心基于Web的应用程序添加授权逻辑,以仅允许作者(记录在每个数据库记录中的用户名)允许编辑/删除某种操作,其他人只能读取。
我做了一些谷歌搜索,看来基于资源的授权可能符合我的要求: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased?view=aspnetcore-2.1&tabs=aspnetcore2x
不确定是否需要编写许多处理程序来实现本示例中所示的逻辑? https://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data?view=aspnetcore-2.1
我的理解是,逻辑类似于:
If current login user == the created by user in database record
Display edit/delete link.
Allow access the edit/delete action method in Controller.
Else
Access is denied.
我应该遵循示例代码的方式还是编写自己的授权类? 而且,如果编写自己的授权逻辑类更简单,该如何在控制器中的edit / delete action方法上方将逻辑作为属性调用?
谢谢。
答案 0 :(得分:0)
不确定是否需要编写大量处理程序来实现本示例中所示的逻辑?
不需要,您可以定义一个PermissionHandler
来检查HandleAsync
中的用户权限。
我该如何在控制器中的edit / delete action方法上方将逻辑作为属性调用?
对于作为属性调用,您可以尝试
[Authorize(Policy = "Read")]
[HttpPost("delete")]
public IActionResult Delete([FromBody]Item item)
{
_itemService.Delete(item.Id);
return Ok();
}
有关完整的演示,请尝试参考Different API functionality for different roles。