Asp.net mvc 基于控制器授权筛选器隐藏视图中的内容
假设我有一个仅限于某些用户的控制器操作,如下所示:Asp.net mvc 基于控制器授权筛选器隐藏视图中的内容,asp.net-mvc,Asp.net Mvc,假设我有一个仅限于某些用户的控制器操作,如下所示: [Authorize(Roles="somerole")]<br /> public ActionResult TestRestricted() { return View(); } [授权(Roles=“somerole”)] public ActionResult TestRestricted(){ 返回视图(); } 从一个观点来看,这对每个人都是公开的,我与上面定义的行动有一个链接: &
[Authorize(Roles="somerole")]<br />
public ActionResult TestRestricted() {
return View();
}
[授权(Roles=“somerole”)]
public ActionResult TestRestricted(){
返回视图();
}
从一个观点来看,这对每个人都是公开的,我与上面定义的行动有一个链接:
<%= Html.ActionLink("Click here!", "TestRestricted") %>
我想做的是为所有不允许执行“TestRestricted”操作的人隐藏链接。是否有方法检查当前用户是否有权使用相应的操作?除了授权过滤器之外,如果不定义任何附加的或重复的访问规则,MVC框架中就没有任何东西可以在如此精细的级别上控制权限 第一种方法 这是迄今为止最简单的方法。缺点是必须将角色分配给每个操作链接 您可以做的是编写一个操作HtmlHelper来控制链接级别的权限。确保包含名称空间
System.Web.Mvc.Html
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string role)
{
MvcHtmlString link = new MvcHtmlString(string.Empty);
if (htmlHelper.ViewContext.RequestContext.HttpContext.User.IsInRole(role))
{
link = htmlHelper.ActionLink(linkText, actionName);
}
return link;
}
<%= Html.ActionLink("Click here!", "TestRestricted", "somerole") %>
public static MvcHtmlString ActionLink(此HtmlHelper、字符串linkText、字符串actionName、字符串角色)
{
MvcHtmlString链接=新的MvcHtmlString(string.Empty);
if(htmlHelper.ViewContext.RequestContext.HttpContext.User.IsInRole(角色))
{
link=htmlhelp.ActionLink(linkText,actionName);
}
返回链接;
}
第二种方法
您可以使用反射来发现正在调用的操作(方法)。一旦发现,对属性的简单检查将告诉您是否存在authorize属性,以及设置了什么角色 这可能有助于:
我也在试图找到这个问题的答案