Asp.net mvc 传递参数和自定义属性
我不知道我的问题该怎么办。我想创建一个自定义授权属性来检查角色和权限。我们的权限不是您的标准权限此角色具有这些权限,但更多权限每个角色可以具有某些权限,但不能具有其他权限 我已重写AuthorizeAttribute类中的AuthorizeCore方法: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
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,并没有节省太多。考虑到使用属性的局限性,实际上没有更好的方法让它访问依赖项,在控制器上使用静态是一个非常糟糕的主意