我的asp.net webform应用程序中有以下文件夹结构。
_AdminUser
_ModeratorUser
_EmployeeUser
Images
js
css
ckeditor
App_Code
errorPages
Default.aspx
News.aspx
Article.aspx
到目前为止,我只有一种用户来编辑网站内容。我曾经只是授权用户并将授权用户重定向到'_AdminUser'文件夹,以便他们
可以对网站进行更改。
以下web.config中的代码足以让我无任何问题地工作。
<authentication mode="Forms">
<forms loginUrl="~/_Login.aspx" timeout="2880"/>
</authentication>
<location path="_adminUser">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
<location path="ckeditor">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
在我的新项目中,我必须创建三种不同类型的用户
_ModeratorUser
及其他常规费用但无法访问_AdminUser
或_EmployeeUser
)& other general folder but no access to
_ AdminUser or
_ EmployeeUser`)为了实现这一目标,我创建了三种类型的角色Admin
,Moderator
和Employee
。当我创建新用户时,我将其分配给特定角色,并且我希望每个角色都可以访问不同的文件夹,如上所述。
但我不知道如何修改web.config文件,以便我可以实现这种基于角色的权限。我一直在寻找这样的教程但到目前为止没有运气。我看过的其他教程似乎没有解决我的问题。我希望指向正确的方向。
答案 0 :(得分:3)
我假设您使用ASP.Net成员资格和角色提供程序。如果是这样,您需要在每个文件夹中使用单独的web.config来限制权限。
管理员文件夹中的以下web.conf设置(位于Admin文件夹中)仅允许Admin
角色中的用户访问Admin文件夹中的文件。其他用户无法访问这些文件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
答案 1 :(得分:0)
您have这是一个非常好的教程,您甚至可以下载管理用户,角色,权限的工具。您可以从附件部分的页面底部下载源代码。
答案 2 :(得分:0)
Web.Config设置
<!--Path: folder path -->
<location path="_adminUser">
<system.web>
<authorization>
<!-- Allow user who have Admin role can access the AdminUser folder aspx pages -->
<allow roles="Admin"/>
<!-- Other user can not access AdminUser folder aspx pages -->
<deny users="*"/>
</authorization>
</system.web>
</location>
<!--Path: folder path -->
<location path="_EmployeeUser">
<system.web>
<authorization>
<!-- Allow user who have Client role can access the ClientUser folder aspx pages -->
<allow roles="Employee"/>
<!-- Other user can not access ClientUser folder aspx pages -->
<deny users="*"/>
</authorization>
</system.web>
</location>
我还为我的登录控制按钮编写了以下代码
protected void Login1_LoggedIn(object sender,EventArgs e) { //请不要在这里使用User.IsInRole,因为在这个阶段它还没有填充。
if (Roles.IsUserInRole(Login1.UserName, "Admin"))
{
Login1.DestinationPageUrl = "~/_adminUser/Default.aspx";
}
else if (Roles.IsUserInRole(Login1.UserName, "Heroes"))
{
Login1.DestinationPageUrl = "~/_EmployeeUser/Default.aspx";
}
}
以上方法对我有用,但它有一个缺点,我必须在每次添加新角色时编码。我不确定相关的哪个单独的web.config文件不能像其中一个解决方案中提到的那样工作。