我正在爲移動應用程序(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);
}
並跳過需求類,處理程序,註冊處理程序和需求。
在每篇教程中,我都會讀到關於這種東西的東西,總是有這種處理器的東西。所以我認爲這是一種很費力的方式,但是有人可以解釋一下實際情況嗎?