Asp.net webform&基于roled的不同文件夹权限

时间:2013-07-24 06:09:37

标签: asp.net webforms asp.net-membership roleprovider

我的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>

在我的新项目中,我必须创建三种不同类型的用户

  1. 管理员用户(谁是超级用户,可以访问不同文件夹中的所有文件)
  2. 主持人用户(此类用户只能访问此文件夹中的文件_ModeratorUser及其他常规费用但无法访问_AdminUser_EmployeeUser
  3. 员工用户(此类用户只能访问此文件夹中的文件_EmployeeUser & other general folder but no access to _ AdminUser or _ EmployeeUser`)
  4. 为了实现这一目标,我创建了三种类型的角色AdminModeratorEmployee。当我创建新用户时,我将其分配给特定角色,并且我希望每个角色都可以访问不同的文件夹,如上所述。

    但我不知道如何修改web.config文件,以便我可以实现这种基于角色的权限。我一直在寻找这样的教程但到目前为止没有运气。我看过的其他教程似乎没有解决我的问题。我希望指向正确的方向。

3 个答案:

答案 0 :(得分:3)

我假设您使用ASP.Net成员资格和角色提供程序。如果是这样,您需要在每个文件夹中使用单独的web.config来限制权限。

管理员文件夹中的

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文件不能像其中一个解决方案中提到的那样工作。