2010-04-29 66 views
8

是否可以在web.config文件的授权元素内指定多个角色?我目前在我的一个网站的web.config此块为特定的目录:在Web.config授权中需要多个角色

<authorization> 
    <allow roles="Global, Region" /> 
    <deny users="*" /> 
</authorization> 

我已经能发现一个特殊情况比全球和区域的两个低级别权限的人也应该有机会到这个目录。粗略地说,我想要这样的事情:

<authorization> 
    <allow roles="GlobalManager, RegionManager, SiteManager && FooSite" /> 
    <deny users="*" /> 
</authorization> 

任何想法?我意识到我应该为这个场景发挥新的作用,但我想避免这种情况。谢谢!

+0

不幸的是,我不认为这是可能的。我试图用来做同样的事情。 :-( – Pandincus 2011-02-24 15:46:34

回答

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() 
3

的方法我通常用来解决这个问题是在设置用户角色时,创建虚拟角色。因此,如果您希望只允许学生管理员访问某个页面,则用户既有学生角色又有管理员角色,则可以添加新的学生管理员角色。

+0

我很想知道你会如何实现这一点。 – 2015-09-24 09:02:27