gpt4 book ai didi

asp.net-mvc - 在 View 中隐藏内容,基于 Controller 授权过滤器

转载 作者:行者123 更新时间:2023-12-02 00:43:56 25 4
gpt4 key购买 nike

假设我有一个仅限于特定用户的 Controller 操作,如下所示:

[Authorize(Roles="somerole")]<br />
public ActionResult TestRestricted() {
return View();
}

在一个对所有人公开的 View 中,我有一个指向上面定义的操作的链接:

<%= Html.ActionLink("Click here!", "TestRestricted") %>

我想做的是为不允许执行“TestRestricted”操作的所有人隐藏链接。有没有办法检查当前用户是否有权使用相应的操作?除了授权过滤器之外,没有定义任何额外的或重复的访问规则?

最佳答案

在 MVC 框架中没有任何东西可以控制如此细粒度的权限。

第一种方法

这是迄今为止最简单的方法。缺点是必须将角色分配给每个操作链接。

您可以做的是编写一个 Action 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") %>

第二种方法

您可以使用反射来发现被调用的操作(方法)。一旦发现,对属性的简单检查将告诉您授权属性是否存在以及它设置的角色。

关于asp.net-mvc - 在 View 中隐藏内容,基于 Controller 授权过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1470762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com