(org.jbpm.identity)身份包包含有如下几个类:
一、Entity 实体类:这个类作为users<用户>groups<组>和memberships<成员>的超类,用来管理名称和权限的增加删除和获取。其中用到了jdk的Permission类。目前还不知道这个对具体权限的控制有什么作用?
二、Group组类:这个类是Entity的继承子类,这个类主要用于区分层次组、安全角色和其他。
(1)主要包含以下几个Filed:
protected String type = null;
protected Group parent = null; //父就是自己
protected Set children = null; //子是一个集合,其中的元素也是Group
protected Set memberships = null; //会员
(2)JBpm的类内部方法的命名还是很不错的:
public Set getUsersForMembershipName(String membershipName) 很容易理解为通过membershipName来获得所有的用户。 这个内不仅仅是简单的JavaBean的setter和getter,而是进行一些引申的操作,例如获取用户以及addXXX等操作。
(3)与之相对应的hibernate Mapping文件Group.hbm.xml其中也有几个地方,值得注意,其实这个在Jbpm中是大量使用的:
table="JBPM_ID_GROUP"
discriminator-value="G">
....
这里表示的是在JBPM_ID_GROUP表中的CLASS_字段等于G的为Group的影射对象。这里我们在使用一个表的不同类型(一个字段对应不同的值)就可以表示不同的类型对象。这一点很值得我们学习的。其他值得我们关注的是它采用的集合类型的操作方式,在我们以前的开发中这种做法并值得采用的。
三、Membership成员类:它是用户和组之间的一个联系的桥梁。会员的名称代表角色的名称。一个会员可能是一个组织的位置,所以权限往往于会员联系。会员的名字能用来做角色的名字。不同的会员来担当不同的角色。
protected String role = null;
protected Group group = null;
protected User user = null;
这个类没有采用传统的构造子复用的方式,而是用很了很多的create()方法,有些方法让人感觉有些茫然不知所措,不过直接相关的代码,也就明白了。
其中影射文件也使用了discriminator(鉴别者)的功能,以及many-to-one和set集合的做法
四、User类:包含有三个字段:password email 以及Set memeberships。
以下是通过两种方式获得Groups的方法,一个是通过组的类别,一种是通过成员名称(角色名称)
public Set getGroupsForGroupType(String groupType)
public Set getGroupsForMembershipName(String membershipName)
通过观察,我们发现这里其实有以下几个对象:Entity Group Memebership User Permission。其中Group、Memebership、User都是Entity都是子类和父类的关系。Entity和Permission是一对多的关系,表示一个实体拥有各种不同的权限,同样其他的Group等子类,也与Permission都是一对多的关系。Group 和Memeber是一对多的,一个组具有不同的角色(成员)。Membership与User和Group是多对一的关系。User和Membership之间是一对多的关系。
其中涉及的表有:
jbpm_id_group;
jbpm_id_membership;
jbpm_id_user;