是否可以指定web.config文件的authorization元素中需要多个角色?我目前在我的网站的一个web.config中有一个特定目录:
<authorization>
<allow roles="Global, Region" />
<deny users="*" />
</authorization>
我刚刚确定了一个特殊情况,其中具有两个低于Global和Region的权限级别的人也应该有权访问此目录。粗略地说,我想要这样的事情:
<authorization>
<allow roles="GlobalManager, RegionManager, SiteManager && FooSite" />
<deny users="*" />
</authorization>
有什么想法吗?我意识到我可能应该为这个场景找到一个新角色,但我想避免这种情况。谢谢!
答案 0 :(得分:3)
我认为你不能通过web.config中允许的当前配置来做到这一点。您可以做的事情如下所示...作为您所查询页面的Page_Load
事件的第一行,请使用以下代码(VB):
If Not (User.IsInRole("Role1") AndAlso User.IsInRole("Role2")) Then _
FormsAuthentication.RedirectToLoginPage()
这一行当然是假设您正在使用FormsAuthentication。如果没有,则需要使用适当的代码替换FormsAuthentication.RedirectToLoginPage()
,具体取决于您的身份验证方法。
我完全不了解您的情况,但根据您的代码,看起来您可以更进一步,并添加一个表格,其中包含用户到网站的映射,并执行以下操作:
在公共模块中,添加以下代码:
<System.Runtime.CompilerServices.Extension()> _
Public Function ManagesSite(target As System.Security.Principal.IPrincipal, siteName As String) As Boolean
Return [ code here to look up whether this user can access the site specified ]
End Function
然后,您可以将以前的代码编写为更符合逻辑的内容,例如:
If Not (User.IsInRole("SiteManager") AndAlso User.ManagesSite(Request.Url.Host)) Then _
FormsAuthentication.RedirectToLoginPage()
答案 1 :(得分:3)
我通常用来解决这个问题的方法是在设置用户角色时创建虚拟角色。因此,如果您只想允许学生管理员访问某个页面,那么用户同时具有学生和管理员角色,您可以添加新的StudentAdministrator角色。