如何动态地向视图或控制器添加权限?
How do I add permission to a view or controller dynamically?
到目前为止,在我的所有 asp.net mvc 项目中,控制器的权限是使用基于 [Authorize]
属性的自定义 class 设置的。
但是,如果我想要一个可以授予视图访问权限的管理员角色,而不是经历必须将控制器接触到 add/remove 角色、重新编译并将更改推送到生产环境的麻烦,该怎么办.我该怎么做?
如讨论的那样。试试下面的方法。
在控制器中,我相信你已经知道了。
[PermissionsFilter("CanAccessMyView")]
public ActionResult ReturnMyView ()
{
//etc..
}
然后,在您的自定义 class
public class PermissionsFilter : AuthorizeAttribute
{
private readonly PermissionManager _permissionsManager;
public PermissionsFilter(string permissionName)
{
_permissionName = permissionName;
_permissionsManager = new PermissionServiceManager();
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!_permissionServiceManager.CanAccessPermission(_permissionName))
{
var urlHelper = new UrlHelper(filterContext.RequestContext);
var url = urlHelper.Action("Unauthorised", "Home");
filterContext.Result = new RedirectResult(url);
}
}
}
权限管理器正在查询数据库或会话信息以查看用户用户是否具有访问权限。
希望对您有所帮助。
到目前为止,在我的所有 asp.net mvc 项目中,控制器的权限是使用基于 [Authorize]
属性的自定义 class 设置的。
但是,如果我想要一个可以授予视图访问权限的管理员角色,而不是经历必须将控制器接触到 add/remove 角色、重新编译并将更改推送到生产环境的麻烦,该怎么办.我该怎么做?
如讨论的那样。试试下面的方法。
在控制器中,我相信你已经知道了。
[PermissionsFilter("CanAccessMyView")]
public ActionResult ReturnMyView ()
{
//etc..
}
然后,在您的自定义 class
public class PermissionsFilter : AuthorizeAttribute
{
private readonly PermissionManager _permissionsManager;
public PermissionsFilter(string permissionName)
{
_permissionName = permissionName;
_permissionsManager = new PermissionServiceManager();
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!_permissionServiceManager.CanAccessPermission(_permissionName))
{
var urlHelper = new UrlHelper(filterContext.RequestContext);
var url = urlHelper.Action("Unauthorised", "Home");
filterContext.Result = new RedirectResult(url);
}
}
}
权限管理器正在查询数据库或会话信息以查看用户用户是否具有访问权限。
希望对您有所帮助。