Role和USER通过中间表关联,CUYAHOGA中,ROLE是带有PermissionLevel属性的,用于存放用户的默认角色,Role和User间通过UserRole进行关联,这里可以看到一个USER可以属于多个ROLE,一个ROLE也可以有多个USER
接下来,对于某一个需要应用权限控制的实体对象,为其建立一个ENTRYROLE表,此表是一个中间表,用于关联ROLE和实体表,用于表示对于某个实体(EntryId),某种角色(RoleId)具有何种权限(PermissionLevel属性)
对于PermissionLevel,它是一个枚举对象,我们使用2的N次方表示一种权限的权限值
对于一个用户,如果赋予多种权限,它的PermissionLevel值就是各种权限值的或运算(相当于相加)
如果判断某用户是否具有某权限,只需判断用户的PermissionLevel与需要的权限值进行按位与操作,看结果是否等于该权限值即可
这个权限体系结构已经将权限的控制细化到一个实体了
但是,有朋友说,无法将权限细化到一个ACTIVERECORD对象上,也就是某条记录上.
确实是无法实化到某条记录上,不过,这是我改变后的CUYAHOGA的权限体系,CUYAHOGA原来的体系是可以将权限施加细化到单条记录上的,只需做一些改变,方法是,为每一个实体建立额外的权限属性,也就是表中加入权限字段,例如CANEDIT,CANDELETE,CANUPDATE,CANVIEW等等,但是,显然,这种方式下,即使把权限细化了,灵活性也是有限,因为,添加任何一种权限必然意味着要添加新的字段