.NET人字拖
万丈高楼平地起,我正在努力筑地基...
随笔- 133  文章- 0  评论- 606 
博客园  社区  首页  新随笔  联系  管理  订阅 订阅

[CommunityServer]看RBAC的一方景象

  随着时间的流逝,CommunityServer已经被我冷落了不少时间了,今天无意中又拿起了这个伟大的工程。可能CS2007的到来还有一段距离,不过也有很多人说那将要花Money去买,不管怎么样他带给了我们不少。今天我看了一下一些论坛的权限设置,所以又想起了这个咚咚;其实我对RBAC也不是非常熟悉,可能我天生对会员权限着一块就有一种恐惧感。闲话就不多说了,切入正题。

  首先对RBAC的几个概念要有所了解:RBAC的全名为
Role Based Access Control,中文名为角色访问控制。它具有两大显著的特征:1.由于角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多,减小了授权管理的复杂性,降低管理开销。2.灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。

  粗粒度:表示类别级,即仅考虑对象的类别(the type of object),不考虑对象的某个特定实例。比如,用户管理中,创建、删除,对所有的用户都一视同仁,并不区分操作的具体对象实例。

  细粒度:表示实例级,即需要考虑具体对象的实例(the instance of object),当然,细粒度是在考虑粗粒度的对象类别之后才再考虑特定实例。比如,合同管理中,列表、删除,需要区分该合同实例是否为当前用户所创建。

  其他的概念可以去搜一下,网上很多,这里图个方便,写了错事抄了两个。下面我们来看看CS中是怎么来实现的:涉及到权限当然是要有用户的,在CS中用户是User类;而用户又和角色挂钩Role,用户和角色之间的关系就是UsersInRoles来关联;Role相当于Group好像其他地方都把它当成Group,在RBAC中用户是不和权限拴在一起的,每个Role都有各自的Permission;有由于CS是个集成多个ApplicationType的项目,每一个ApplicationType所对应角色的权限有可能不一样。看一下数据库的关系图:

  在cs_ProductPermissions表中存放的是各个ApplicationType所对应的一些Permission,在cs_SectionPermission表中存放的是各个Section(一些从Section继承的类)所对应的Permission。下面我们看一下CS中对Permission的定义:
 1     [Flags()]
 2     public enum Permission : long {
 3         Undefined        = 0,
 4         View            = 0x0000000000000001,
 5         Read            = 0x0000000000000002,
 6         Post            = 0x0000000000000004,
 7         Reply            = 0x0000000000000008,
 8         Edit            = 0x0000000000000010,
 9         Delete            = 0x0000000000000020,
10         LocalAttachment    = 0x0000000000000040,
11         Vote            = 0x0000000000000080,
12         MarkAsAnswer    = 0x0000000000000100,
13         RemoteAttachment= 0x0000000000000200,
14         Video            = 0x0000000000000400,
15         Ink                = 0x0000000000000800,
16         CreatePoll        = 0x0000000100000000,
17         Sticky            = 0x0000000200000000,
18         Announcement    = 0x0000000400000000,
19         EditOthers        = 0x0000000800000000,
20         Moderate        = 0x0000100000000000,
21         Administer        = 0x0100000000000000,
22         SystemAdmin        = 0x4000000000000000,
23     }
24 
25     public enum AccessControlEntry {
26         NotSet  = 0x00,
27         Allow   = 0x01,
28         Deny    = 0x02
29     }

  上面的两个枚举就是所涉及到的权限,Permissions是固定的,一个项目所涉及到的所有控制权限都应该枚举于此;AccessControlEnty枚举说明了允许和禁止的两个所对应的Permission。在这里还有一个必须要提起的一个类,那就是PermissionBase类,在各个的ApplicationType模块程序的Permission都必须继承与此类;同时在这个文件中我们还可以看到两个代理方法用于判断是否有权限。

  以我个人的理解:RBAC中User/Role/Permission=>UsersInRoles/RoleIncludePermissions/PermissionCheckFromAccess,所以在开发过程中如果需要Permission的都应PermissionCheck,有多少个Permission时固定的,这样就可以操纵Role中的Permission,从而操纵User。由于我对RBAC也不是和有研究,今天抽空来看看,如果有什么不对的地方,希望能够多多指教!

关于作者:网魂小兵

文章出处:http://xdotnet.cnblogs.com

本文可以随意转载,摘抄等非商业用途。

为了尊重作者成果,在转载和摘抄的时候请留下作者名称和出处。

绿色通道:好文要顶关注我收藏该文与我联系
posted @ 2007-02-02 17:08 网魂小兵 阅读(2637) 评论(17) 编辑 收藏
907436
#1楼幽思[未注册用户] 在2007-09-26 13:50说:
你好,我现在在用CommunityServer做二次开发,但遇到了一个棘手的问题,请教一下你。在开发过程中发现,凡是自己后来新建的角色,也把所有权限都给它赋上,最后在给此角色下加入一个用户,用此用户进行登录,但是发现并不能实现大部份操作。例如:新建一个名为Uber的角色,给之加上所有的权限,再新建一用户Test,但是用此用户去移除别人的帖子或删除,都不能成功,会自动转到Login页面,以致抛出错误提示。但用系统内建的角色就可以成功。

 回复 引用   
#2楼[楼主]网魂小兵       在2007-09-27 09:01说:
@幽思

由于已经很久没有研究那东东了,对于你的问题我也不是很清楚,不过你可以到www.CommunityServer.org的论坛上去问,应该会有人给你解答的!!!

 回复 引用 查看   
注册用户登录后才能发表评论,请 登录 或 注册,返回博客园首页。
首页博问闪存新闻园子招聘知识库
最新IT新闻:
· Chrome将给老机带来更快的3D绘图性能
· 在线支付创业公司Stripe获红杉资本等1800万美元的投资,公司估值达1亿美元
· 创新工场孵化公司磊友科技今天正式推出首款大型手机HTML5网页游戏《黎明帝国》
· 霍金的伟大与不幸
· Linux为什么成功?因为它的失败是免费的!
» 更多新闻...
最新知识库文章:
· 高级编程语言的发展历程
· 如何学习一门新的编程语言?
· 学习不同编程语言的重要性
· 为什么我喜欢富于表达性的编程语言
· 计算机专业的女生为什么要学编程
» 更多知识库文章...

China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
Copyright ©2012 网魂小兵
Name:
网魂小兵
Addr:
福建厦门
MSN:
myxbing#hotmail.com
昵称:网魂小兵
园龄:5年11个月
粉丝:23
关注:0

搜索

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论
  • 我的标签
  • 更多链接

我的标签

  • directx11(6)
  • direct3d 11(6)
  • 游戏编程(6)
  • c/c++(6)
  • vs2010(5)
  • wpf(4)
  • openssl(2)
  • direct3d坐标系(2)
  • vs2008(2)
  • xaml(2)
  • 更多

随笔分类(170)

  • AJAX(doc)(8)
  • ASP.NET(46)
  • C#3.0+(13)
  • C/C++(27)
  • CommunityServer(7)
  • Database(11)
  • Enterprise Library (7)
  • JavaScript(10)
  • ServerContols(7)
  • UML(1)
  • VC++/MFC(8)
  • WPF/SilverLight(6)
  • XNA Game(2)
  • 翻译(4)
  • 今天我当家(11)
  • 设计模式(2)

随笔档案(133)

  • 2012年2月 (3)
  • 2011年8月 (3)
  • 2011年7月 (7)
  • 2011年5月 (1)
  • 2011年4月 (2)
  • 2011年2月 (1)
  • 2010年1月 (1)
  • 2009年3月 (3)
  • 2009年1月 (8)
  • 2008年3月 (1)
  • 2008年2月 (3)
  • 2008年1月 (1)
  • 2007年11月 (4)
  • 2007年10月 (3)
  • 2007年9月 (9)
  • 2007年8月 (3)
  • 2007年7月 (2)
  • 2007年6月 (9)
  • 2007年5月 (9)
  • 2007年4月 (14)
  • 2007年3月 (6)
  • 2007年2月 (3)
  • 2007年1月 (15)
  • 2006年12月 (9)
  • 2006年11月 (2)
  • 2006年10月 (4)
  • 2006年9月 (7)

文章分类

  • Asp.Net(.NET)

I Like Links

  • ASP.NET
  • Codeplex
  • XNADevelopment

My Friend's Blog

  • 陆巍杰
  • 孙小雨
  • 探丫头
  • 网络安全&Linux

积分与排名

  • 积分 - 283912
  • 排名 - 248

最新评论

阅读排行榜

评论排行榜