Asp.net mvc 传递参数和自定义属性

Asp.net mvc 传递参数和自定义属性,asp.net-mvc,custom-attributes,Asp.net Mvc,Custom Attributes,我不知道我的问题该怎么办。我想创建一个自定义授权属性来检查角色和权限。我们的权限不是您的标准权限此角色具有这些权限,但更多权限每个角色可以具有某些权限,但不能具有其他权限 我已重写AuthorizeAttribute类中的AuthorizeCore方法: internal class RoleAttribute : AuthorizeAttribute { private readonly IUserRepository _userRepository; private rea

我不知道我的问题该怎么办。我想创建一个自定义授权属性来检查角色和权限。我们的权限不是您的标准权限此角色具有这些权限,但更多权限每个角色可以具有某些权限,但不能具有其他权限

我已重写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
    }
我无法将依赖项注入到重写的方法中,因为我无法将注入传递到属性中

我意识到这不是解决问题的好方法,但在我们能够与客户一起解决问题,使我们朝着更好的实践方向前进之前,我需要相应地开发


我的主要问题是:有没有更好的方法来创建允许这种行为的自定义授权筛选器?

如果您认为仅仅因为在控制器中实例化存储库,每个请求都将使用相同的实例,那么您就错了。每次都将实例化控制器。因此,不只是在属性中实例化repo,并没有节省太多。考虑到使用属性的局限性,实际上没有更好的方法让它访问依赖项,在控制器上使用静态是一个非常糟糕的主意