在Web.config授权中需要多个角色

时间:2010-04-29 15:01:46

标签: asp.net authorization roles web-config

是否可以指定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>

有什么想法吗?我意识到我可能应该为这个场景找到一个新角色,但我想避免这种情况。谢谢!

2 个答案:

答案 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角色。