我正在寻找一种方法来轻松地围绕某个位置设置安全性,同时使用它来显示/隐藏菜单上的链接。
我知道如何为未经授权的用户屏蔽位置,例如:
<location path="AdminDirectory">
<system.web>
<authorization>
<allow roles="SomeRole"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
我可以用代码显示/隐藏链接,例如:
myLink.Visible = User.IsInRole("SomeRole");
但我正在寻找一种方法来执行此操作,以便只需配置一次“SomeRole”角色名称。如果我可以从 location
元素读取并在代码中对其进行测试,那将是理想的,但我没有找到这样做的方法。
// Something like:
myLink.Visible = TestLocationAccess("AdminDirectory");
我可以想到一种非常糟糕的方法,通过 javascript/AJAX 调用从客户端“测试”目录并使用 javascript 显示/隐藏链接,但显然这并不理想。
谢谢
最佳答案
您可以使用 CheckUrlAccessForPrincipal方法:
myLink.Visible = UrlAuthorizationModule
.CheckUrlAccessForPrincipal("~/AdminDirectory", User, "GET");
由于该方法是静态的,您显然需要将当前 IPrincipal
的实例作为第二个参数传递。
关于c# - ASP.NET 身份验证允许/阻止页面访问并同时显示/隐藏链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954728/