activiti用户角色权限与自身系统用户角色同步

同步的方法有很多。由于本人也是新手,也只用了一种方法。在此介绍一种方法。就是表的数据同步。

思路:     系统添加角色则向act_id_group添加一条数据

系统添加用户则向act_id_user添加一条数据,同时向act_id_membership添加多条数据。

代码很简单如下:

              /**
* 根据角色添加activiti组
* @param role
*/
@SuppressWarnings("deprecation")
public void saveActivitiLxf(Role role) {
if(role!=null) {
String roleId = ObjectUtils.toString(role.getId());
Group activitiGroup = identityService.createGroupQuery().groupId(roleId).singleResult();
if (activitiGroup == null) {
activitiGroup = identityService.newGroup(roleId);
identityService.saveGroup(activitiGroup);
}
}
}


<p>
<span style="white-space: pre;"></span>/**
<span style="white-space: pre;"></span>* 根据角色ID删除activiti组
<span style="white-space: pre;"></span>* @param roleId
<span style="white-space: pre;"></span>*/
<span style="white-space: pre;"></span>public void deleteActivitiLxf(String roleId) {
<span style="white-space: pre;"></span>if(roleId!=null && !"".equals(roleId)) {
<span style="white-space: pre;"></span>identityService.deleteGroup(roleId);
<span style="white-space: pre;"></span>//删除组所对应的所有用户
<span style="white-space: pre;"></span>List<org.activiti.engine.identity.User> users = identityService.createUserQuery().memberOfGroup(roleId).list();
<span style="white-space: pre;"></span>for(org.activiti.engine.identity.User user : users){
<span style="white-space: pre;"></span>identityService.deleteMembership(user.getId(), roleId);
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
</p><p>
</p><p>
</p><p><span style="white-space: pre;"></span>/**
<span style="white-space: pre;"></span>* 同步activiti用户信息
<span style="white-space: pre;"></span>* @param user
<span style="white-space: pre;"></span>*/
<span style="white-space: pre;"></span>@SuppressWarnings("deprecation")
<span style="white-space: pre;"></span>public void saveActivitiLxf(User user) {
<span style="white-space: pre;"></span>if(user!=null) {
<span style="white-space: pre;"></span>String userLoginName = ObjectUtils.toString(user.getLoginName());
<span style="white-space: pre;"></span>org.activiti.engine.identity.User activitiUser = identityService.createUserQuery().userId(userLoginName).singleResult();
<span style="white-space: pre;"></span>if (activitiUser == null) {
<span style="white-space: pre;"></span>activitiUser = identityService.newUser(userLoginName);
<span style="white-space: pre;"></span>identityService.saveUser(activitiUser);
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>//同步用户角色关联数据
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>List<Role> roles = user.getRoleList();
<span style="white-space: pre;"></span>mergeLxf(user, roles);
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>
</p><p>/**
<span style="white-space: pre;"></span>* 根据用户角色同步用户角色信息
<span style="white-space: pre;"></span>* @param user
<span style="white-space: pre;"></span>* @param roles
<span style="white-space: pre;"></span>*/
<span style="white-space: pre;"></span>@SuppressWarnings({ "deprecation", "unchecked" })
<span style="white-space: pre;"></span>private void mergeLxf(User user,List<Role> roles) {
<span style="white-space: pre;"></span>String userLoginName = ObjectUtils.toString(user.getLoginName());
<span style="white-space: pre;"></span>List<Group> activitiGroupList = identityService.createGroupQuery().groupMember(userLoginName).list();
<span style="white-space: pre;"></span>if(Collections3.isEmpty(roles)) {
<span style="white-space: pre;"></span>for(Group group:activitiGroupList) {
<span style="white-space: pre;"></span>identityService.deleteMembership(userLoginName, group.getId());
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>} else {
<span style="white-space: pre;"></span>Map<String,String> groupMap =Maps.newHashMap();
<span style="white-space: pre;"></span>for(Role role:roles) {
<span style="white-space: pre;"></span>groupMap.put(role.getId(), role.getName());
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>Map<String,String> activitiGroupMap = Collections3.extractToMap(activitiGroupList, "id", "name");
<span style="white-space: pre;"></span>for(String groupId:activitiGroupMap.keySet()) {
<span style="white-space: pre;"></span>if(StringUtils.isNotBlank(groupId) && !groupMap.containsKey(groupId)) {
<span style="white-space: pre;"></span>identityService.deleteMembership(userLoginName, groupId);
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>for(String groupId:groupMap.keySet()) {
<span style="white-space: pre;"></span>if(StringUtils.isNotBlank(groupId) && !activitiGroupMap.containsKey(groupId)) {
<span style="white-space: pre;"></span>identityService.createMembership(userLoginName, groupId);
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>
<span style="white-space: pre;"></span>/**
<span style="white-space: pre;"></span>* 根据用户登陆名称删除activiti用户
<span style="white-space: pre;"></span>* @param userLoginName
<span style="white-space: pre;"></span>*/
<span style="white-space: pre;"></span>public void deleteActiviti(String userLoginName) {
<span style="white-space: pre;"></span>if(userLoginName!=null && !"".equals(userLoginName)) {
<span style="white-space: pre;"></span>identityService.deleteUser(userLoginName);
<span style="white-space: pre;"></span>//删除用户对应的所有组
<span style="white-space: pre;"></span>List<Group> groups = identityService.createGroupQuery().groupMember(userLoginName).list();
<span style="white-space: pre;"></span>for(Group group : groups){
<span style="white-space: pre;"></span>identityService.deleteMembership(userLoginName, group.getId());
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
</p><p>            </p><p>一键同步。</p><p>/**
<span style="white-space: pre;"></span>* 手工同步所有Activiti数据
<span style="white-space: pre;"></span>*/
<span style="white-space: pre;"></span>@SuppressWarnings("deprecation")
<span style="white-space: pre;"></span>@Transactional(readOnly = false)
<span style="white-space: pre;"></span>public void synToActiviti()  {
<span style="white-space: pre;"></span>permissionDao.updateBySql("delete from ACT_ID_MEMBERSHIP",null);
<span style="white-space: pre;"></span>permissionDao.updateBySql("delete from ACT_ID_GROUP", null);
<span style="white-space: pre;"></span>permissionDao.updateBySql("delete from ACT_ID_USER", null);
<span style="white-space: pre;"></span>
<span style="white-space: pre;"></span>List<Group> activitiGroupList = identityService.createGroupQuery().list();
<span style="white-space: pre;"></span>List<org.activiti.engine.identity.User> activitiUserList = identityService.createUserQuery().list();
<span style="white-space: pre;"></span>
<span style="white-space: pre;"></span>if (activitiGroupList.size() == 0 && activitiUserList.size() == 0){
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>//添加所有角色
<span style="white-space: pre;"></span>List<Role> roleList = roleDao.findAll();
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>for (Role role : roleList) {
<span style="white-space: pre;"></span>Group group = identityService.newGroup(role.getId());
<span style="white-space: pre;"></span>identityService.saveGroup(group);
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>//添加所有用户以及用户角色
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>List<User> userList = userDao.findAllList();
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>for(User user : userList){
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>org.activiti.engine.identity.User activitiUesr = identityService.newUser(ObjectUtils.toString(user.getLoginName()));
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>identityService.saveUser(activitiUesr);
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>List<Role> roles = user.getRoleList();
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>for(Role role : roles){
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>identityService.createMembership(user.getLoginName(), role.getId());
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span><span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
<span style="white-space: pre;"></span>}
</p><div>
</div>



如有不懂请加高级开发群共同讨论。135430763


/**
* 根据角色ID删除activiti组
* @param roleId
*/
public void deleteActivitiLxf(String roleId) {
if(roleId!=null && !"".equals(roleId)) {
identityService.deleteGroup(roleId);
//删除组所对应的所有用户
List<org.activiti.engine.identity.User> users = identityService.createUserQuery().memberOfGroup(roleId).list();
for(org.activiti.engine.identity.User user : users){
identityService.deleteMembership(user.getId(), roleId);
}
}
}



/**
* 同步activiti用户信息
* @param user
*/
@SuppressWarnings("deprecation")
public void saveActivitiLxf(User user) {
if(user!=null) {
String userLoginName = ObjectUtils.toString(user.getLoginName());
org.activiti.engine.identity.User activitiUser = identityService.createUserQuery().userId(userLoginName).singleResult();
if (activitiUser == null) {
activitiUser = identityService.newUser(userLoginName);
identityService.saveUser(activitiUser);
}
//同步用户角色关联数据
List<Role> roles = user.getRoleList();
mergeLxf(user, roles);
}
}

/**
* 根据用户角色同步用户角色信息
* @param user
* @param roles
*/
@SuppressWarnings({ "deprecation", "unchecked" })
private void mergeLxf(User user,List<Role> roles) {
String userLoginName = ObjectUtils.toString(user.getLoginName());
List<Group> activitiGroupList = identityService.createGroupQuery().groupMember(userLoginName).list();
if(Collections3.isEmpty(roles)) {
for(Group group:activitiGroupList) {
identityService.deleteMembership(userLoginName, group.getId());
}
} else {
Map<String,String> groupMap =Maps.newHashMap();
for(Role role:roles) {
groupMap.put(role.getId(), role.getName());
}
Map<String,String> activitiGroupMap = Collections3.extractToMap(activitiGroupList, "id", "name");
for(String groupId:activitiGroupMap.keySet()) {
if(StringUtils.isNotBlank(groupId) && !groupMap.containsKey(groupId)) {
identityService.deleteMembership(userLoginName, groupId);
}
}
for(String groupId:groupMap.keySet()) {
if(StringUtils.isNotBlank(groupId) && !activitiGroupMap.containsKey(groupId)) {
identityService.createMembership(userLoginName, groupId);
}
}
}
}

/**
* 根据用户登陆名称删除activiti用户
* @param userLoginName
*/
public void deleteActiviti(String userLoginName) {
if(userLoginName!=null && !"".equals(userLoginName)) {
identityService.deleteUser(userLoginName);
//删除用户对应的所有组
List<Group> groups = identityService.createGroupQuery().groupMember(userLoginName).list();
for(Group group : groups){
identityService.deleteMembership(userLoginName, group.getId());
}
}
}

            

一键同步。

/**
* 手工同步所有Activiti数据
*/
@SuppressWarnings("deprecation")
@Transactional(readOnly = false)
public void synToActiviti()  {
permissionDao.updateBySql("delete from ACT_ID_MEMBERSHIP",null);
permissionDao.updateBySql("delete from ACT_ID_GROUP", null);
permissionDao.updateBySql("delete from ACT_ID_USER", null);

List<Group> activitiGroupList = identityService.createGroupQuery().list();
List<org.activiti.engine.identity.User> activitiUserList = identityService.createUserQuery().list();

if (activitiGroupList.size() == 0 && activitiUserList.size() == 0){
//添加所有角色
List<Role> roleList = roleDao.findAll();
for (Role role : roleList) {
Group group = identityService.newGroup(role.getId());
identityService.saveGroup(group);
}
//添加所有用户以及用户角色
List<User> userList = userDao.findAllList();
for(User user : userList){
org.activiti.engine.identity.User activitiUesr = identityService.newUser(ObjectUtils.toString(user.getLoginName()));
identityService.saveUser(activitiUesr);
List<Role> roles = user.getRoleList();
for(Role role : roles){
identityService.createMembership(user.getLoginName(), role.getId());
}
}
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值