AspNetForums中基于角色的权限控制

转载 2005年05月17日 11:16:00

AspNetForums中对于用户权限,是类似于Windows系统采用基于角色(Role)的权限控制,这样,我们就可以根据需要,设定不同的角色,设置各个角色的权限,并将各个用户属于不同的角色。根据用户所属的角色,来判断用户可以有哪些权限,进行哪些操作。

先看看数据库设计
forums_Users表,用户表,UserID为主键,唯一确定一个用户
forums_Roles表,角色表,RoleID为主键,唯一确定一个角色
forums_UsersInRoles表,用户和角色对应关系表,存储用户所在的角色
forums_ForumPermissions表,角色在某版块的权限,记录了在每个版块中各个角色可以有权限进行哪些操作

再看看是如何来判断用户操作权限的:
当用户登录后,要获取论坛所有版块的信息并缓存,在获取版块信息的同时,要获取当前用户在每个版块操作(如发表新帖、投票、附件等)的权限。操作权限有三种:"有权限"、"无权限"和"未设置",如果是未设置,那么就看这个操作的默认权限是什么。一个用户可以属于多个角色,每个角色对应的操作权限不一样,要判断这个用户有没有当前操作的权限,则遍历这个用户所属的所有角色,如果任一角色有权限,那么该用户就有该操作的权限。具体实现请参考源码:
Components/Forums.cs中的GetForums(ForumContext forumContext, int userID, bool ignorePermissions, bool cacheable)方法和Components/Provider/ForumsDataProvider.cs中PopulateForumPermissionRightFromIDataReader方法。

角色和web.config的结合
Asp.Net有一个功能就是可以用于控制对 URL 资源的客户端访问(可参考QuickStart上的说明)。它对于用于生成请求的 HTTP 方法(GETPOST)是可配置的,并且可被配置为允许或拒绝访问用户组或角色组。这个方法也被应用到AspNetForums中,例如在admin目录(管理员操作相关页面)和Moderate目录(版主操作相关页面)下都有一个web.config目录,通过web.config,可以设定其所在目录的URL客户端访问权限。

以Admin目录下的web.config中的配置为例:
 <authorization>
  <allow roles="Global Administrators" />
  <allow roles="Site Administrators" />
  <deny users="*" />
 </authorization>
这个表示对于属于Global Administrators角色和Site Administrators角色授权,其他任何用户都禁止访问该目录下的页面。因为对于部分页面,希望版主也可以进行访问,那么可以增加如下配置:
    <location path="ForumAdmin.aspx">
      <system.web>
        <authorization>
          <allow roles="Global Administrators" />
          <allow roles="Site Administrators" />
          <allow roles="Global Moderators" />
          <allow roles="Site Moderators" />
          <deny users="?" />
        </authorization>
      </system.web>
    </location>   
这样,对于/Admin/ForumAdmin.aspx这个URL,属于Global Moderators或Site Moderators角色的用户也可以有权访问。

怎么设置登录用户的角色
具体实现请参考源码:Components/Roles.cs 和文章《如何使用 Forms 身份验证创建 GenericPrincipal 对象

附:CnForums源码下载

转载于http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx

基于角色的权限控制设计

  • 2012年03月14日 14:56
  • 486KB
  • 下载

ASP.net MVC 基于角色的权限控制系统的实现

一、引言 我们都知道ASP.net mvc权限控制都是实现AuthorizeAttribute类的OnAuthorization方法。 下面是最常见的实现方式: public ...

基于角色和资源的用户权限控制(用SpringMVC实现)

大龄菜鸟 2017-03-03 19:25 介绍 用户权限控制几乎是每个网站都会涉及到的问题,这不仅是涉及到安全,而且还涉及到用户的体验,例如,某个用户可能只需要用到少数几个模块,那么,我们就不应...

thinkphp基于角色权限控制

  • 2009年04月05日 01:17
  • 103KB
  • 下载

ThinkPHP 基于角色的权限控制

  • 2010年07月14日 09:33
  • 658KB
  • 下载

Yii中使用RBAC完全指南 (用户角色权限控制)

Yii中使用RBAC完全指南 (用户角色权限控制)  (2011-01-26 11:39:21) 转载▼ 标签:  杂谈 分类: yii ...
  • samxx8
  • samxx8
  • 2012年06月29日 09:40
  • 12440
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AspNetForums中基于角色的权限控制
举报原因:
原因补充:

(最多只允许输入30个字)