C# ASP.NET身份验证,允许/阻止页面访问,同时显示/隐藏链接

C# ASP.NET身份验证,允许/阻止页面访问,同时显示/隐藏链接,c#,asp.net,security,authorization,C#,Asp.net,Security,Authorization,我正在寻找一种方法,可以轻松地将安全性包装到某个位置,同时使用它来显示/隐藏菜单上的链接 我知道如何阻止未经授权用户的位置,例如: <location path="AdminDirectory"> <system.web> <authorization> <allow roles="SomeRole"/> <deny users="*"/> <

我正在寻找一种方法,可以轻松地将安全性包装到某个位置,同时使用它来显示/隐藏菜单上的链接

我知道如何阻止未经授权用户的位置,例如:

<location path="AdminDirectory">
    <system.web>
        <authorization>
            <allow roles="SomeRole"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>
但我要寻找的是一种方法,这样“SomeRole”角色名只需配置一次。如果我可以从
位置
元素中读取数据并在代码中进行测试,那将是理想的,但我没有看到一种方法可以做到这一点

// Something like:
myLink.Visible = TestLocationAccess("AdminDirectory");
我可以想出一种非常糟糕的方法,使用javascript/AJAX调用从客户端“测试”目录,并使用javascript显示/隐藏链接,但显然这并不理想

谢谢

考虑使用内置功能的It来显示或隐藏基于角色的链接

i、 e在站点地图的源xml中,可以定义链接应用的角色,即

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="default.aspx" title="Home">
        <siteMapNode url="admin.aspx" title="Admin" roles="Admin" />
        <siteMapNode url="user.aspx" title="User Page" roles="User" />
    </siteMapNode>
</siteMap>

您可以使用角色来限制web.config中的访问,并使用相同的角色来限制站点地图中的导航

我猜你仍然控制着两个地方的授权。这是我(过去)会做的事。不知道这是否能让你达到你需要去的地方

无论如何,这里的解释比我能解释的更好

您可以使用以下方法:


由于该方法是静态的,您显然需要将当前的
IPrincipal

实例作为第二个参数传递,这正是我所要寻找的。谢谢
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="default.aspx" title="Home">
        <siteMapNode url="admin.aspx" title="Admin" roles="Admin" />
        <siteMapNode url="user.aspx" title="User Page" roles="User" />
    </siteMapNode>
</siteMap>
myLink.Visible = UrlAuthorizationModule
    .CheckUrlAccessForPrincipal("~/AdminDirectory", User, "GET");