宝玉的blog

专注于web开发技术
随笔 - 81, 评论 - 1563, 引用 - 157

导航

关于


目前致力于ChinaCommunityServer的开发。

msn: junminliu(at)msn.com

标签

每月存档

最新留言

  • re:发布一个爱心小软件——网页抓图
    <p>你好 我看了你的代码 不错啊,请问在asp.net C#中 没有了webbrowser 该怎么实现?</p> <p><a href="http...
    by weblogical(注册) on 2009/9/9 17:22:55
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:37
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:31
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:30
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:29
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Silverlight中,防止ComboBox抢焦点
    <p>我是初学者,您已经写了一个 组件上传的功能 。。我在2008下测试通过,,,但是弄2005测试的时候 发现 progress.aspx.cs页面的</p> <p&...
    by jxh12345j(注册) on 2009/4/7 8:55:12
  • ufnnutdh - Google Search
    ufnnutdh - Google Search
    by (匿名) on 2008/10/27 17:44:45
  • veysaync - Google Search
    veysaync - Google Search
    by (匿名) on 2008/10/5 5:20:49
  • mzgmhgio - Google Search
    mzgmhgio - Google Search
    by (匿名) on 2008/9/22 23:34:49
  • rhmhnyma - Google Search
    rhmhnyma - Google Search
    by (匿名) on 2008/9/22 7:48:44
  • re: 发布一个爱心小软件——网页抓图
    Maxthon应该有这个功能
    by passos(匿名) on 2008/7/21 20:05:23

广告

 

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源码下载

打印 | 张贴于 2005-02-24 00:31:00 | Tag:CnForums

留言反馈

#回复: AspNetForums中基于角色的权限控制 编辑
用户登录后,要获取论坛所有版块的信息并缓存,在获取版块信息的同时,要获取当前用户在每个版块操作(如发表新帖、投票、附件等)的权限。操作权限有三种:"有权限"、"无权限"和"未设置",如果是未设置,那么就看这个操作的默认权限是什么。一个用户可以属于多个角色,每个角色对应的操作权限不一样,要判断这个用户有没有当前操作的权限,则遍历这个用户所属的所有角色,如果任一角色有权限,那么该用户就有该操作的权限。具体实现请参考源码:
Components\Forums.cs中的GetForums(ForumContext forumContext, int userID, bool ignorePermissions, bool cacheable)方法和Components\Provider\ForumsDataProvider.cs中PopulateForumPermissionRightFromIDataReader上海同传已经有了这方面的应用经验,希望多交流和沟通。
2007-08-23 17:58:00 | [匿名:上海同传]
#回复: AspNetForums中基于角色的权限控制 编辑
分析 非常 好.
2006-12-18 14:53:00 | [匿名:虫子]
#基于角色的权限控制 编辑
基于角色的权限控制
2006-08-14 15:44:00 | [匿名:得峰]
#基于角色的权限控制 部分连链 编辑
AspNetForums中基于角色的权限控制http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspxasp.net页面如何控制页面依据不...
2006-07-14 10:40:00 | [匿名:夜青鸟]
#权限管理设计、分析、实现参考资料 编辑
好东西呀~~好东西呀!要用的朋友你们做个连接吧~
2006-07-01 16:19:00 | [匿名:飞鸟还是飞鸟]
#基于角色的权限控制 编辑
关于角色和权限的一些链接
2006-05-18 01:57:00 | [匿名:David]
#aspnet基于权限控制 编辑
AspNetForums中基于角色的权限控制
2006-03-16 17:30:00 | [匿名:jame_peng]
#re: AspNetForums中基于角色的权限控制 编辑
fdsfdsf
2006-02-20 09:17:00 | [匿名:反抗圣诞节防空洞技术]
#re: AspNetForums中基于角色的权限控制 编辑
fdsfsdfdsfd
2006-02-20 09:16:00 | [匿名:drop table]
#re: AspNetForums中基于角色的权限控制 编辑
ewrwerwerwerwerwqerwr
2006-02-20 09:15:00 | [匿名:%$#$%^%]
#re: AspNetForums中基于角色的权限控制 编辑
dsfsdfsdfsdfsdfdsfsf
2006-02-20 09:15:00 | [匿名:'--]
#[网际参考]权限管理设计、分析、实现 编辑
权限管理
2006-02-07 10:44:00 | [匿名:dawnsong]
#re: AspNetForums中基于角色的权限控制 编辑
理论深度不够,不能复用,不能通用为任何一种系统的构件.
2006-01-20 15:56:00 | [匿名:feqw]
#re: AspNetForums中基于角色的权限控制 编辑
dgdgd
2005-12-28 16:44:00 | [匿名:waw]
#re: AspNetForums中基于角色的权限控制 编辑
不错,值得收藏!
2005-06-22 21:36:00 | [匿名:http://www.yx57.com]
#re:AspNetForums中基于角色的权限控制 编辑
AspNetForums中基于角色的权限控制ooeess
2005-06-15 23:25:00 | [匿名:气味检测仪]
#re: AspNetForums中基于角色的权限控制 编辑
# re: AspNetForums中基于角色的权限控制
因为你的dll还没编译,所以控件无法显示。

请问是哪个dll,谢谢
2005-06-03 10:14:00 | [匿名:liuyong]
#re:AspNetForums中基于角色的权限控制 编辑
^_~,pretty good!csharpsseeoo
2005-05-17 22:03:00 | [匿名:广播综合测试仪]
#AspNetForums中基于角色的权限控制----(转载) 编辑
Ping Back来自:blog.csdn.net
2005-05-17 11:25:00 | [匿名:abandonship]
#基于角色的权限控制 编辑
Ping Back来自:blog.csdn.net
2005-04-20 14:18:00 | [匿名:jzywh]
#re:AspNetForums中基于角色的权限控制 编辑
^_^,Pretty Good!
2005-04-16 04:45:00 | [匿名:移液系统]
#re: AspNetForums中基于角色的权限控制 编辑
因为你的dll还没编译,所以控件无法显示。
2005-04-11 22:34:00 | [匿名:宝玉]
#re: 还是希望告诉我解决方法 编辑
我用Vs2003打开时。Default.aspx上面显示创建控件时出错"Default1" 如题,请问要怎么解决,谢谢!!
Vs2003打开时。Default.aspx上面显示创建控件时出错"Default1"



属于正常现象
不影响最终显示


2005-04-09 01:07:00 | [匿名:LIUYONG]
#re: AspNetForums中基于角色的权限控制 编辑
to pucao:
可能你理解错了,缓存的key是和UserID有关的,匿名用户(UserID为0)登录时缓存的是匿名用户的板块和权限等相关信息,当登录后,key就变了,所以就会重新从数据库读取该登录用户的信息。
你说的缓存问题在技术上也是可以完全可以避免的:
1. 清除对应key的缓存
2. 更新对应key的缓存
2005-02-24 09:54:00 | [匿名:宝玉]
#re: AspNetForums中基于角色的权限控制 编辑
真不错,说得真详细。谢谢宝玉。
2005-02-24 09:48:00 | [匿名:66飞飞]
#re: AspNetForums中基于角色的权限控制 编辑
"当用户登录后,要获取论坛所有版块的信息并缓存,在获取版块信息的同时,要获取当前用户在每个版块操作(如发表新帖、投票、附件等)的权限"
但是如果用户首先用游客的身份进入论坛,看到需要回复的贴子后登录(这里帖子要注册用户才能回复),由于缓存不能及时更新,会造成用户不能回复。总不能老是告诉用户“是缓存的原因,等一会就好”吧。
2005-02-24 02:33:00 | [匿名:pucao]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0