私は、モバイルアプリ(アンドロイド)のバックエンドWebサービス(asp.netコア2.0)を作成しています。アプリのユーザーは自分のアイテムだけを表示する必要があり、ウェブサービスでチェックしたいと思います。ウェブサービスは、ユーザーがアイテムを見ることを許可されているかどうかをどのようにチェックしますか?
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;
}
}
これまでのところ、とても良い、この:私のコントローラで
、私はどこかにこの
[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
実装があります持っています動作しますが、それは多くのコードと間接的なものであり、魔法の文字列については言及しません(ただし、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);
}
を書いて、要求クラス、ハンドラ、ハンドラの登録と要件のをスキップすることができます。
私はこの種の物について読んだすべてのチュートリアルで、常にこのハンドラのことがあります。だから私は面倒な方法のための正当な理由があると思うが、誰が実際に何があるかも説明できますか?