- 浏览: 140790 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
liuxiang00435057:
不知道,你有这个的实现不,能发给我参考下吗,liuxiang0 ...
RBAC模型的通用权限管理系统的设计(数据模型)的扩展 -
步青龙:
这个批量上传确定可以用吗?我这怎么不行呢,官方的Demo也不行 ...
KindEditor 4.1 发布,开源HTML编辑器
发现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和tomcat6包冲突问题 javax.el.ELException: expression factory class not found
2012-11-29 12:07 1399将tomcat的lib下的包el-api.jar 替换成jbp ... -
jbpm4.4 sql脚本
2012-11-29 11:44 854CREATE TABLE JBPM4_DEPLOYMENT ( ... -
jbpm学习笔记—— task活动之泳道的概念
2012-08-31 14:47 920任务泳道的概念:在实际的业务应用中,经常会遇到这样一种场景:流 ... -
jbpm4 数据库结构关系图
2012-08-23 12:25 1388持久化基础知识 持久化( Persist ... -
JBPM4.4 eclipse插件安装
2012-08-23 10:41 836JBPM4.4 eclipse插件安装 j ... -
JBPM4 表结构概要说明
2011-12-15 10:06 1072(1)JBPM4_DEPLOYMENT、 (2)JBPM4_ ... -
jbpm4.4安装配置
2011-12-09 14:15 9611. 准备jBPM:http://sourcefo ... -
JBPM4.4 和tomcat6.0.X 兼容问题
2011-12-09 14:16 757基于JBPM4的web项目jsp页面发布出错,错误如下: ...
相关推荐
jbpm4.4开发指南,jbpm4.4用户指南
jbpm4.4 jar 包下载jbpm4.4 jar 包下载jbpm4.4 jar 包下载jbpm4.4 jar 包下载
jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd
jBPM 4.4 用户手册 中文版 PDF格式
jBPM4.4开发指南 开发手册 JBPM4.4 开发
JBPM4.4与SSH2之整合(附完整源码) 这些天,想着把jbpm4.4与ssh2整合一下,由于之前从来没用过jbpm,也不知道各版本之间会有什么差异(经过网上的收集对比,还真有些差异),整合起来,还真是有些步履艰难。收集了...
jbpm4.4下载地址
资源名称:JBPM4.4视频教程(22集附源码)资源目录:【】(01)jbpm4.4简介【】(02)JBPM4.4开发环境搭建【】(03)jbpm4.4环境搭建续【】(04)jbpm4.4配置文件和开发前准备【】(05)jbpm4.4部署流程发起流程实例【】(06)...
jBPM 4.4用户手册 翻译官方文档 JBoss jBPM Teams 4.4 译者: Lingo 首页: http://www.family168.com/ 论坛: http://old.family168.com/bbs EMAIL: lingosurf168@gmail.com 2009年11月1日 1. 导言 1.1. 许可...
jBPM4.4入门开发实例
首先感谢原创,相关信息请查询原创。... 看到好多朋友找不到相应的jar包,致使jbpm4.4的学习遇到困难,现提供除jbpm4.4自身jar包外的所有包,以便大家更快的学习jbpm4.4,希望能帮朋友们少走弯路!
JBPM4.4学习文档.ppt
jBPM4.4课程文档
JBPM4.4之HelloWorld示例
终于把jbpm4.4上传完了,由于csdn最大容量才50m,所以我把这个jar包分成三个部分。
jbpm4.4整合s2sh 请假流程例子
jbpm4.4+ssh配置
jBPM4.4数据库表简单介绍
jbpm4.4 ibatis-spring 整合
jBPM 4.4开发指南,翻译官方文档 JBoss jBPM Teams