私の ASP.NET Web API コントローラーでは、ユーザー ロールのユーザーへのアクセスを制限したいと考えています。これを行う一般的な方法は、AuthorizeAttribute ( example、example )を拡張してから、コントローラーにカスタム属性 ([AuthorizeUser] など) を振りかけることです。
これを行う別の方法は、コントローラーのコンストラクターに関数を追加することです。依存性注入を使用しているため、とにかくコンストラクターが必要です。
ここにいくつかのコードがあります:
public class MyController: ApiController
{
private IUnitOfWork unitOfWork;
private IAccountUtils accountUtils;
// Constructor
public MyController(
IUnitOfWork unitOfWork,
IAccountUtils accountUtils)
{
this.unitOfWork = unitOfWork;
this.accountUtils = accountUtils;
// Restrict access to 'User' role
accountUtils.ThrowExceptionIfUserNotInRole(User.Identity, "User");
}
// More code
}
フィルターを使用してユーザーを承認するチュートリアルと例は無数にあるため、それが最善の方法であると思いました。ただし、デバッガーでコードをステップ実行すると、フィルターの前にコンストラクター メソッドが起動されることがわかりました。
コードを最適化するには、ユーザーがコントローラーへのアクセスを許可されていない場合は、できるだけ早く中断することが理にかなっています。私が間違っていなければ、フィルターではなくコンストラクターで承認を実行する方が効率的です。私は正しいですか、それともここで何かが欠けていますか?