【问题标题】:Asp.net webform & roled based permission for different foldersAsp.net webform & 基于角色的不同文件夹的权限
【发布时间】:2013-07-24 06:09:37
【问题描述】:

我的 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&amp; other general folder but no access to_AdminUseror_EmployeeUser`)

为了实现这一点,我创建了三种类型的角色AdminModeratorEmployee。当我创建新用户时,我将其分配给特定角色,并且我希望每个角色都可以访问如上所述的不同文件夹。

但我不确定如何修改 web.config 文件,以便获得这种基于角色的权限。我一直在寻找这样的教程,但到目前为止还没有运气。我看过的其他教程似乎没有解决我的问题。我会很感激一个正确方向的指针。

【问题讨论】:

  • 我发现这个教程似乎解决了我的问题http://www.c-sharpcorner.com/UploadFile/ishbandhu2009/role-based-authorization/ 我会尝试看看它是否有效

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


【解决方案1】:

我假设您使用 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>

【讨论】:

  • 我尝试了这种方法,但由于某种原因它不起作用,所以我使用了不同的工具,我将把它作为解决方案发布。从逻辑上讲,您的解决方案应该可以工作,但我之前尝试过相同的方法,但对我没有用。
  • 上面的想法是将特定文件夹的设置保留在文件夹中,而不是主web.config。但是,如果您想将配置设置集中在单个文件中,您的解决方案也很有用。
【解决方案2】:

have这里是一个很好的教程,你甚至可以下载一个管理用户、角色、权限的工具。您可以从页面底部的附件部分下载源代码。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-22
      • 2021-04-01
      • 2014-10-11
      • 2018-05-29
      • 2023-03-15
      • 2020-12-18
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多