App-ASP Net Core API。 我们有实体-用户和文档。 每个用户都经过身份验证,因此我在服务器端具有userId。 我有资源-文件。每个文档都有作者(userId)。我们会对文件采取行动-由作者执行。 我需要授权当前用户为当前文档的作者才能发送。 因此,在所有准则中,我看到这样的建议:
[Authorize]
public async Task<IActionResult> Send(int id)
{
var document = _documentRepository.Get(id);
if (document == null)
{
return new NotFoundResult();
}
var authorizationResult = await _authorizationService.AuthorizeAsync(User, document, new MyRequirement());
if (authorizationResult.Succeeded)
{
return Ok();
}
else
{
throw...;
}
}
但是,如果我不想获取文件怎么办?我一般的API-BL交互如下:
[Authorize]
public async Task<IActionResult> Send(int id)
{
await _documentSender.SendAsync(id);
}
在这种情况下,我应该在哪里调用AuthorizationService?我每次都需要调用文档的getter吗?
答案 0 :(得分:1)
您可以简单地将授权烘焙到您的_documentSender.SendAsync
呼叫中,例如像这样:
await _documentSender.SendAsync(id, User.FindFirstValue(ClaimTypes.NameIdentifier));
NameIdentifier
声明是用户的ID。换句话说,您只需将当前用户的ID传递给您的方法并在内部进行授权。