我不知道该去哪里解决我的问题。我想创建一个自定义授权属性来检查角色和权限。我们的权限不是您的标准,这个角色有这些权限,但更多的是每个角色可以有一些权限,但不能有其他权限。
我已经覆盖了 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
}
我不能依赖注入到被覆盖的方法中,因为我不能将注入传递到属性中。
我意识到这不是解决问题的好方法,但直到我们可以与客户一起解决一些问题,使我们朝着更好的实践迈进,我需要相应地开发。
我的主要问题是:是否有更好的方法来创建允许这种行为的自定义授权过滤器?