我们的ASP.NET MVC 5.0应用程序正在使用ASP.NET中的用户和角色,但使用自定义权限扩展它。根据用户角色的具体权限,它们需要非常精细和动态的授权属性和链接呈现。
例如:
许可名称:Products.Edit
用户:MyUser
UserRoles:Admin,ProductsAdmin
角色权限:X,Y,Z ...... Products.Edit ... n
我有一个服务,它接受如下角色列表:
public interface PermissionServiceInterface
{
bool HasPermission(string permissionNameIdentifier, params string[] roles);
}
我使用Ninject创建了一个自定义的Authenticate属性,可以应用于控制器或这样的动作:
[PermissionAuthorize("Products.Edit")]
public ProductsController()
{
}
现在,我想根据用户角色是否具有特定权限,有条件地在视图中呈现链接。
类似的东西:
@Html.ActionLink("Create Product", "Create").If("Products.Edit")
使用这样的静态扩展方法:
public static MvcHtmlString If(this MvcHtmlString value, string permission)
{
return permissionService.HasPermission(permission) ? value :
MvcHtmlString.Empty;
}
问题在于您无法将依赖项注入静态扩展类。
这给了我一些选择,但似乎都有点过分了。
这些都是理想的吗?还有其他更简单的方法吗?
谢谢你们!