gpt4 book ai didi

c# - MVC4 使用自定义 AuthorizeAttribute 隐藏链接

转载 作者:行者123 更新时间:2023-11-30 16:19:18 24 4
gpt4 key购买 nike

我已经研究了一段时间,现在试图弄清楚如何在我的 View 中使用我的自定义 AuthorizeAttribute 类来显示和隐藏链接。我正在从 IsInRole 过渡到自定义 AuthorizeAttribute,因为我希望最终用户选择哪些组有权执行某些任务。到目前为止,我一直在使用:

        @{ if (HttpContext.Current.User.IsInRole("UserMgr"))
{ Html.ActionLink("Edit", "Edit", new { id = item.pkRecID }); }
}

其中 UserMgr 是域组。 (这确实有效,但不是我需要做的)

然后我创建了一个自定义的 AuthorizeAttribute 类:

    public class isAuthorized : AuthorizeAttribute
{
public string Access { get; set; }

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authorized = base.AuthorizeCore(httpContext);

string[] aszList = Access.Split(',');

if (!authorized)
{
// The user is not authenticated
return false;
}

var user = httpContext.User;
if (user.IsInRole("Admin"))
return true;

var rd = httpContext.Request.RequestContext.RouteData;
var id = rd.Values["id"] as string;
if (string.IsNullOrEmpty(id))
{
// Now id was specified => we do not allow access
return false;
}

foreach (string szGroup in aszList) // check to see if user is in group
{
if (user.IsInRole(szGroup))
{
return true;
}
}

return false;
}

这在我的 Controller 中有效以阻止对功能的访问,但我如何使用此功能在我的 View 中隐藏链接?

谢谢!

最佳答案

您可以创建一个扩展方法,这样您就可以将它应用于 Cshtml 文件中的 MvcHtmlStrings示例:

public static IHtmlString If(this IHtmlString value, bool evaluation)
{
return evaluation ? value : MvcHtmlString.Empty;
}

然后在您的 html 元素上,您可以像这样使用它:

@Html.ActionLink("Reports", "Index", "Report").If(User.IsInRole("SuperAdmin"))

更新

步骤:

  1. 在您的项目中创建一个新的静态类。

  2. 将建议的扩展方法添加到新创建的类中。

  3. 要使这个静态类在所有 cshtml View 中可用,请转到位于 Views 文件夹中的 webconfig。

  4. 再次注意,web 配置位于 views 文件夹中,不要编辑应用根目录下的配置。

  5. 添加静态类所在的命名空间,如下例所示。

    <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="YourApplication.Utils"/> <!-- THIS IS THE EXAMPLE ON HOW TO INSERT THE NAMESPACE THAT CONTAINS YOUR STATIC CLASS -->
    <add namespace="Microsoft.Web.Helpers"/>
    </namespaces>
    </pages>
    </system.web.webPages.razor>

我无法解释得比这个更好。

关于c# - MVC4 使用自定义 AuthorizeAttribute 隐藏链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15389641/

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