私の問題をどこに行けばよいかわかりません。役割と権限を確認するためのカスタム承認属性を作成したいと考えています。私たちの権限はあなたの標準ではありません。この役割にはこれらの権限がありますが、各役割の多くはいくつかの権限を持つことができますが、他の権限は持つことができません.
AuthorizeAttribute クラスの AuthorizeCore メソッドをオーバーライドしました。
internal class RoleAttribute : AuthorizeAttribute
{
private readonly IUserRepository _userRepository;
private readonly IPermissionRepository _permissionRepository;
public RoleAttribute(IUserRepository userRepository, IPermissionRepository permissionRepository)
{
_userRepository = userRepository;
_permissionRepository = permissionRepository;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
User user = _userRepository.GetUsers();
Permission permission = _permissionRepository.GetPermissions();
return user.Permissions.Where(x => x.Id == permission.Id).Any();
}
}
そのため、属性を実装すると:
private static IUserRepository _userRepository;
private static IPermissionRepository _permissionRepository;
public TopNavigationController(IUserRepository userRepository, IPermissionRepository permissionRepository)
{
_userRepository = userRepository;
_permissionRepository = permissionRepository;
}
[Role(_userRepository, _permissionRepository)]
public ActionResult MethodThatHasStuff()
{
//Do stuff return stuff if user has the permissions
}
インジェクションを属性に渡すことができないため、オーバーライドされたメソッドに依存性をインジェクトすることはできません。
これは問題に取り組む良い方法ではないことは承知していますが、顧客と協力してより良いプラクティスに向けて何かを解決できるようになるまでは、それに応じて開発する必要があります。
私の主な質問は、この種の動作を許可するカスタム承認フィルターを作成するより良い方法はありますか?