JBPM4.4 自定义用户组
来源:互联网 发布:python中的try except 编辑:程序博客网 时间:2024/06/13 07:45
发现JBPM4的权限方面略差一些以后,还是觉得可以续写接口,实现自定义用户组
贴出以下几个关键文件:
jbpm.identity.cfg.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <jbpm-configuration>
- <transaction-context>
- <object class="com.squall.jbpm.test.MesIdentitySessionImpl"/>
- </transaction-context>
- </jbpm-configuration>
MesUser.java
- package com.squall.jbpm.test;
- import java.io.Serializable;
- import java.sql.Blob;
- import org.jbpm.api.identity.User;
- public class MesUser implements Serializable, User {
- private static final long serialVersionUID = 1L;
- private String id;
- private String userNo;// 员工工号
- private String userName;// 员工姓名
- private String userSex;// 性别
- private String userPassword;// 密码
- private String userType;// 类型
- private String userMail;// 电子邮件
- private String isValid;// 是否有效Y/N
- private Blob signaturePic;// 电子签名
- private String remarks;// 备注
- protected long dbid; // 数据库内部自生成的ID
- protected int dbversion;
- public int getDbversion() {
- return dbversion;
- }
- public MesUser() {
- }
- public MesUser(String id, String userName, String userMail) {
- this.id = id;
- this.userName = userName;
- this.userMail = userMail;
- }
- public void setDbversion(int dbversion) {
- this.dbversion = dbversion;
- }
- public long getDbid() {
- return dbid;
- }
- public void setDbid(long dbid) {
- this.dbid = dbid;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getUserNo() {
- return userNo;
- }
- public void setUserNo(String userNo) {
- this.userNo = userNo;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getUserSex() {
- return userSex;
- }
- public void setUserSex(String userSex) {
- this.userSex = userSex;
- }
- public String getUserPassword() {
- return userPassword;
- }
- public void setUserPassword(String userPassword) {
- this.userPassword = userPassword;
- }
- public String getUserType() {
- return userType;
- }
- public void setUserType(String userType) {
- this.userType = userType;
- }
- public String getUserMail() {
- return userMail;
- }
- public void setUserMail(String userMail) {
- this.userMail = userMail;
- }
- public String getIsValid() {
- return isValid;
- }
- public void setIsValid(String isValid) {
- this.isValid = isValid;
- }
- public Blob getSignaturePic() {
- return signaturePic;
- }
- public void setSignaturePic(Blob signaturePic) {
- this.signaturePic = signaturePic;
- }
- public String getRemarks() {
- return remarks;
- }
- public void setRemarks(String remarks) {
- this.remarks = remarks;
- }
- public String getDisplayName() {
- return userName + "(" + id + ")";
- }
- // 实现User接口所必须实现的几个方法
- public String getId() {
- return this.id;
- }
- public String getGivenName() {
- return null;
- }
- public String getFamilyName() {
- return null;
- }
- public String getBusinessEmail() {
- return this.userMail;
- }
- }
MesGroup.java
- package com.squall.jbpm.test;
- import java.io.Serializable;
- import org.jbpm.api.identity.Group;
- public class MesGroup implements Serializable, Group {
- private static final long serialVersionUID = 1L;
- private String id;
- private String groupName;// 组织名称
- private String groupType;// 组织类型
- private MesGroup parentGroup;// 父组织
- private String remarks;// 备注
- protected long dbid;
- protected int dbversion;
- public int getDbversion() {
- return dbversion;
- }
- public void setDbversion(int dbversion) {
- this.dbversion = dbversion;
- }
- public long getDbid() {
- return dbid;
- }
- public void setDbid(long dbid) {
- this.dbid = dbid;
- }
- public String getParentGroupID() {
- return parentGroup != null ? parentGroup.getId() : null;
- }
- public String getParentGroupName() {
- return parentGroup == null ? "xxx" : parentGroup.getGroupName();
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getGroupName() {
- return groupName;
- }
- public void setGroupName(String groupName) {
- this.groupName = groupName;
- }
- public String getGroupType() {
- return groupType;
- }
- public void setGroupType(String groupType) {
- this.groupType = groupType;
- }
- public MesGroup getParentGroup() {
- return parentGroup;
- }
- public void setParentGroup(MesGroup parentGroup) {
- this.parentGroup = parentGroup;
- }
- public String getRemarks() {
- return remarks;
- }
- public void setRemarks(String remarks) {
- this.remarks = remarks;
- }
- // 实现Group接口必须的几个方法
- public String getName() {
- return this.groupName;
- }
- public String getType() {
- return this.groupType;
- }
- public String getId() {
- return id;
- }
- }
MesGroupMember.java
- package com.squall.jbpm.test;
- import java.io.Serializable;
- public class MesGroupMember implements Serializable {
- private static final long serialVersionUID = 1L;
- protected long dbid;
- protected int dbversion;
- private MesUser user;
- private MesGroup group;
- protected String role;
- public int getDbversion() {
- return dbversion;
- }
- public void setDbversion(int dbversion) {
- this.dbversion = dbversion;
- }
- public long getDbid() {
- return dbid;
- }
- public String getRole() {
- return role;
- }
- public void setRole(String role) {
- this.role = role;
- }
- public void setDbid(long dbid) {
- this.dbid = dbid;
- }
- public MesGroup getGroup() {
- return group;
- }
- public void setGroup(MesGroup group) {
- this.group = group;
- }
- public String getUserNo() {
- return user.getUserNo();
- }
- public String getUserID() {
- return user.getId();
- }
- public String getUserName() {
- return user.getUserName();
- }
- public MesUser getUser() {
- return user;
- }
- public void setUser(MesUser user) {
- this.user = user;
- }
- }
MesIdentitySessionImpl.java
- package com.squall.jbpm.test;
- import java.util.Arrays;
- import java.util.List;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import org.hibernate.criterion.Projections;
- import org.hibernate.criterion.Restrictions;
- import org.jbpm.api.JbpmException;
- import org.jbpm.api.identity.Group;
- import org.jbpm.api.identity.User;
- import org.jbpm.pvm.internal.env.BasicEnvironment;
- import org.jbpm.pvm.internal.env.EnvironmentImpl;
- import org.jbpm.pvm.internal.id.DbidGenerator;
- import org.jbpm.pvm.internal.identity.spi.IdentitySession;
- @SuppressWarnings("unchecked")
- public class MesIdentitySessionImpl implements IdentitySession {
- protected Session session;
- public MesIdentitySessionImpl() {
- this.session = BasicEnvironment.getFromCurrent(Session.class);
- }
- /*
- public String createH() {
- Test t = new Test();
- long dbid = EnvironmentImpl.getFromCurrent(DbidGenerator.class).getNextId();
- t.setDbid(dbid);
- t.setId("abc");
- return null;
- }
- */
- public String createUser(String id, String userName,
- String businessEmail, String familName) {
- MesUser user = new MesUser(id, userName, businessEmail);
- long dbid = EnvironmentImpl.getFromCurrent(DbidGenerator.class).getNextId();
- user.setDbid(dbid);
- session.save(user);
- return user.getId();
- }
- public MesUser findUserById(String userId) {
- return (MesUser) session.createCriteria(MesUser.class).add(
- Restrictions.eq("id", userId)).uniqueResult();
- }
- public List<User> findUsersById(String... userIds) {
- List<User> users = session.createCriteria(MesUser.class).add(
- Restrictions.in("id", userIds)).list();
- if (userIds.length != users.size()) {
- throw new JbpmException("not all users were found: "
- + Arrays.toString(userIds));
- }
- return users;
- }
- public List<User> findUsers() {
- return session.createCriteria(MesUser.class).list();
- }
- public void deleteUser(String userId) {
- // lookup the user
- MesUser user = findUserById(userId);
- // cascade the deletion to the memberships
- List<MesGroupMember> memberships = session.createCriteria(
- MesGroupMember.class).add(Restrictions.eq("user", user)).list();
- // delete the related memberships
- for (MesGroupMember membership : memberships) {
- session.delete(membership);
- }
- // delete the user
- session.delete(user);
- }
- public String createGroup(String groupName, String groupType,
- String parentGroupId) {
- MesGroup group = new MesGroup();
- String groupId = groupType != null ? groupType + "." + groupName
- : groupName;
- group.setId(groupId);
- long dbid = EnvironmentImpl.getFromCurrent(DbidGenerator.class)
- .getNextId();
- group.setDbid(dbid);
- group.setGroupName(groupName);
- group.setGroupType(groupType);
- if (parentGroupId != null) {
- MesGroup parentGroup = findGroupById(parentGroupId);
- group.setParentGroup(parentGroup);
- }
- session.save(group);
- return group.getId();
- }
- public List<User> findUsersByGroup(String groupId) {
- return session.createCriteria(MesGroupMember.class).createAlias(
- "group", "g").add(Restrictions.eq("g.id", groupId))
- .setProjection(Projections.property("user")).list();
- }
- public MesGroup findGroupById(String groupId) {
- return (MesGroup) session.createCriteria(MesGroup.class).add(
- Restrictions.eq("id", groupId)).uniqueResult();
- }
- public List<Group> findGroupsByUserAndGroupType(String userId,
- String groupType) {
- return session.createQuery(
- "select distinct m.group" + " from "
- + MesGroupMember.class.getName()
- + " as m where m.user.id = :userId"
- + " and m.group.type = :groupType").setString("userId",
- userId).setString("groupType", groupType).list();
- }
- public List<Group> findGroupsByUser(String userId) {
- List<Group> gList = session.createQuery(
- "select distinct m.group" + " from "
- + MesGroupMember.class.getName()
- + " as m where m.user.id = :userId").setString(
- "userId", userId).list();
- return gList;
- }
- public List<Group> findGroups() {
- return session.createCriteria(MesGroup.class).list();
- }
- public void deleteGroup(String groupId) {
- // look up the group
- MesGroup group = findGroupById(groupId);
- // cascade the deletion to the memberships
- List<MesGroupMember> memberships = session.createCriteria(
- MesGroupMember.class).add(Restrictions.eq("group", group))
- .list();
- // delete the related memberships
- for (MesGroupMember membership : memberships) {
- session.delete(membership);
- }
- // delete the group
- session.delete(group);
- }
- public void createMembership(String userId, String groupId, String role) {
- MesUser user = findUserById(userId);
- if (user == null) {
- throw new JbpmException("user " + userId + " doesn't exist");
- }
- MesGroup group = findGroupById(groupId);
- if (group == null) {
- throw new JbpmException("group " + groupId + " doesn't exist");
- }
- MesGroupMember membership = new MesGroupMember();
- membership.setUser(user);
- membership.setGroup(group);
- membership.setRole(role);
- long dbid = EnvironmentImpl.getFromCurrent(DbidGenerator.class)
- .getNextId();
- membership.setDbid(dbid);
- session.save(membership);
- }
- public void deleteMembership(String userId, String groupId, String role) {
- MesGroupMember membership = (MesGroupMember) session.createCriteria(
- MesGroupMember.class).createAlias("user", "u").createAlias(
- "group", "g").add(Restrictions.eq("u.id", userId)).add(
- Restrictions.eq("g.id", groupId)).uniqueResult();
- session.delete(membership);
- }
- }
applicationContext-hibernate.xml
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <context:annotation-config />
- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
- p:location="hibernate.properties"
- p:ignoreUnresolvablePlaceholders="true" />
- <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
- <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <property name="mappingResources">
- <list>
- <value>jbpm.repository.hbm.xml</value>
- <value>jbpm.execution.hbm.xml</value>
- <value>jbpm.history.hbm.xml</value>
- <value>jbpm.task.hbm.xml</value>
- <value>jbpm.identity.hbm.xml</value>
- </list>
- </property>
- </bean>
- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory"></property>
- </bean>
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="${dataSource.driverClassName}" />
- <property name="url" value="${dataSource.url}" />
- <property name="username" value="${dataSource.username}" />
- <property name="password" value="${dataSource.password}" />
- </bean>
- </beans>
customize.hbm.xml
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="org.jbpm.pvm.internal.identity.impl" default-access="field">
- <!--
- ### USER ###########################################################
- -->
- <class name="com.squall.jbpm.test.MesUser" table="JBPM4_CUSTOMIZE_USER">
- <id name="dbid" column="DBID">
- <generator class="assigned" />
- </id>
- <version name="dbversion" column="DBVERSION_" />
- <property name="id" column="USERID_" /> <!-- 登陆ID -->
- <property name="userNo" column="USERNO_" /> <!-- 员工工号 -->
- <property name="userName" column="USERNAME_" /> <!-- 姓名 -->
- <property name="userSex" column="USERSEX_" /> <!-- 性别 -->
- <property name="userPassword" column="USERPASSWORD_" /> <!-- 密码 -->
- <property name="userType" column="USERTYPE_" /> <!-- 类型 -->
- <property name="userMail" column="USERMAIL_" /> <!-- 电子邮件 -->
- <property name="signaturePic" column="SIGNATUREPIC_" /> <!-- 电子签名 -->
- <property name="remarks" column="REMARKS_" /> <!-- 备注 -->
- </class>
- <!--
- ### MEMBERSHIP #####################################################
- -->
- <class name="com.squall.jbpm.test.MesGroupMember" table="JBPM4_CUSTOMIZE_MEMBERSHIP">
- <id name="dbid" column="DBID_">
- <generator class="assigned" />
- </id>
- <version name="dbversion" column="DBVERSION_" />
- <many-to-one name="user" column="USER_" class="com.squall.jbpm.test.MesUser"
- foreign-key="FK_MEM_USER" index="IDX_MEM_USER" />
- <many-to-one name="group" column="GROUP_" class="com.squall.jbpm.test.MesGroup"
- foreign-key="FK_MEM_GROUP" index="IDX_MEM_GROUP" />
- <property name="role" column="NAME_" />
- </class>
- <!--
- ### GROUP ###########################################################
- -->
- <class name="com.squall.jbpm.test.MesGroup" table="JBPM4_CUSTOMIZE_GROUP">
- <id name="dbid" column="DBID_">
- <generator class="assigned" />
- </id>
- <version name="dbversion" column="DBVERSION_" />
- <!--
- private String groupID;//数据库内部ID号 private String groupName;//组织名称
- private String groupType;//组织类型 private MesGroup parentGroup;//父组织
- private String remarks;//备注
- -->
- <property name="id" column="ID_" />
- <property name="groupName" column="NAME_" />
- <property name="groupType" column="TYPE_" />
- <property name="remarks" column="REMARKS_" />
- <many-to-one name="parentGroup" column="PARENT_" class="com.squall.jbpm.test.MesGroup"
- foreign-key="FK_GROUP_PARENT" index="IDX_GROUP_PARENT" />
- </class>
- </hibernate-mapping>
自己看看,懂了就OK了!
- JBPM4.4 自定义用户组
- jbpm4.4入门建议
- SSH整合JBPM4.4
- SSH整合JBPM4.4
- Spring3集成jbpm4.4
- jbpm4.4基础知识(一)
- jbpm4.4基础知识
- jbpm4.4 会签实例
- Jbpm4.4集成SSH
- Jbpm4.4 Mail配置
- jbpm4.4表结构
- Spring继承JBPM4.4
- jbpm4.4动态路由
- jbpm4.4动态任务
- jbpm4.4测试demo
- jbpm4.4安装
- jbpm4.4请假流程
- jbpm4.4 eclipse安装
- 如何在Google成为一名优秀的产品经理?
- 获取外网IP的方法
- Project facet Java version 6.0 is not supported.
- octopress的安装
- How to Install Apache 2.4.2 from Source on CentOS 6.2 with SSL
- JBPM4.4 自定义用户组
- “嵌入式底层开发” 与 “上层应用开发” 哪个更累
- 响应式设计—设备宽度解析
- VS2008的环境下,使用MFC和MSChart小结
- 坐标系问题,geoserver 从2.0升级到2.3
- as贪食蛇小游戏(二)
- 如何在IIS6.0上部署.NET4.0+MVC2.0网站
- Apache + PHP5 配置
- 「译」JavaScript 的怪癖 1:隐式类型转换