[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都必须继承与此类;同时在这个文件中我们还可以看到两个代理方法用于判断是否有权限。

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/02/02/communityserver_userrolepermission_rbac.html,如需转载请自行联系原作者

相关文章
|
4月前
为什么你的角色总是能穿墙
为什么你的角色总是能穿墙
28 0
|
安全 搜索推荐 网络安全
网络世界,谁来为我们的隐私负责?
随着技术的发展,便捷与隐私、隐私与安全的矛盾正在愈演愈烈。 技术发展大势不可阻挡,隐私权不可以忽视。公民对于隐私权的关注度正在提高,相应的,每一个互联网企业都需要明白自己能够为此做些什么。
243 0