我正在为移动应用程序(android)创建后端Web服务(asp.net核心2.0)。该应用程序的用户应该只能看到他的项目,并且我想在Web服务中进行检查。webservice如何检查用户是否被允许查看项目?
在我的控制,我有这样的
[HttpGet("{id}")]
public async Task<IActionResult> Get(int id)
{
var item = _repository.GetItem(id);
if (!(await _authorizationService.AuthorizeAsync(User, item, nameof(IsAllowedToSeeRequirement))).Succeeded)
return BadRequest();
return new ObjectResult(item);
}
和地方的代码,有一个IsAllowedToSeeRequirement
和AuthorizationHandler
实现,它的实际检查:
public class IsAllowedToSeeAuthorizationHandler : AuthorizationHandler<IsAllowedToSeeRequirement, Item>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsAllowedToSeeRequirement requirement, Item item)
{
if (context.User.Identity.Name == item.Owner)
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
到目前为止,一切都很好,这作品,但它是很多代码和间接,而不是说魔术字符串(虽然减轻了nameof
)...
我可以写
[HttpGet("{id}")]
public IActionResult Get(int id)
{
var item = _repository.GetItem(id);
if (item.Owner != User.Identity.Name)
return BadRequest();
return new ObjectResult(item);
}
并跳过需求类,处理程序,注册处理程序和需求。
在每篇教程中,我都会读到关于这种东西的东西,总是有这种处理器的东西。所以我认为这是一种很费力的方式,但是有人可以解释一下实际情况吗?