diff --git a/datagear-management/src/main/java/org/datagear/management/service/RoleService.java b/datagear-management/src/main/java/org/datagear/management/service/RoleService.java index 196271cd..d44dba4c 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/RoleService.java +++ b/datagear-management/src/main/java/org/datagear/management/service/RoleService.java @@ -8,7 +8,6 @@ package org.datagear.management.service; import java.util.List; -import java.util.Set; import org.datagear.management.domain.Role; @@ -26,14 +25,6 @@ public interface RoleService extends EntityService @Override boolean[] deleteByIds(String[] ids) throws DeleteBuiltinRoleDeniedException; - /** - * 查找指定用户的所有角色集。 - * - * @param userId - * @return 没有则返回空集合 - */ - Set findByUserId(String userId); - /** * 获取。 * diff --git a/datagear-management/src/main/java/org/datagear/management/service/RoleUserService.java b/datagear-management/src/main/java/org/datagear/management/service/RoleUserService.java deleted file mode 100644 index ac2d04c6..00000000 --- a/datagear-management/src/main/java/org/datagear/management/service/RoleUserService.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2018 datagear.tech - * - * Licensed under the LGPLv3 license: - * http://www.gnu.org/licenses/lgpl-3.0.html - */ - -package org.datagear.management.service; - -import java.util.List; - -import org.datagear.management.domain.Role; -import org.datagear.management.domain.RoleUser; -import org.datagear.management.domain.User; -import org.datagear.persistence.PagingData; -import org.datagear.persistence.PagingQuery; -import org.datagear.persistence.Query; - -/** - * {@linkplain RoleUser}业务服务接口。 - * - * @author datagear@163.com - * - */ -public interface RoleUserService extends EntityService -{ - /** - * 根据{@linkplain Role}和{@linkplain User}获取记录,没有找到返回{@code null}。 - * - * @param role - * @param user - * @return - */ - RoleUser getByRoleAndUser(Role role, User user); - - /** - * 是否已存在重复记录。 - * - * @param role - * @param user - * @return - */ - boolean exists(Role role, User user); - - /** - * 添加不重复的记录。 - * - * @param roleUsers - * @return - */ - boolean[] addIfInexistence(RoleUser... roleUsers); - - /** - * 查询。 - * - * @param role - * @param query - * @return - */ - List queryForRole(Role role, Query query); - - /** - * 查询。 - * - * @param role - * @param query - * @return - */ - PagingData pagingQueryForRole(Role role, PagingQuery query); -} diff --git a/datagear-management/src/main/java/org/datagear/management/service/UserService.java b/datagear-management/src/main/java/org/datagear/management/service/UserService.java index d8748d96..4053d133 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/UserService.java +++ b/datagear-management/src/main/java/org/datagear/management/service/UserService.java @@ -33,6 +33,14 @@ public interface UserService extends EntityService */ User getByIdNoPassword(String id); + /** + * 更新,但是忽略{@linkplain User#getRoles()}。 + * + * @param user + * @return + */ + boolean updateIgnoreRole(User user); + /** * 更新用户密码。 * diff --git a/datagear-management/src/main/java/org/datagear/management/service/impl/RoleServiceImpl.java b/datagear-management/src/main/java/org/datagear/management/service/impl/RoleServiceImpl.java index 96613270..d89b0e6b 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/impl/RoleServiceImpl.java +++ b/datagear-management/src/main/java/org/datagear/management/service/impl/RoleServiceImpl.java @@ -8,10 +8,8 @@ package org.datagear.management.service.impl; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import org.apache.ibatis.session.SqlSessionFactory; import org.datagear.management.domain.Role; @@ -45,21 +43,6 @@ public class RoleServiceImpl extends AbstractMybatisEntityService super(sqlSessionTemplate, dialect); } - @Override - public Set findByUserId(String userId) - { - Set set = new HashSet<>(); - - Map params = buildParamMap(); - params.put("userId", userId); - - List roles = query("findByUserId", params); - - set.addAll(roles); - - return set; - } - @Override public List getByIds(String... ids) { diff --git a/datagear-management/src/main/java/org/datagear/management/service/impl/RoleUserServiceImpl.java b/datagear-management/src/main/java/org/datagear/management/service/impl/RoleUserServiceImpl.java deleted file mode 100644 index 7a6b2dfd..00000000 --- a/datagear-management/src/main/java/org/datagear/management/service/impl/RoleUserServiceImpl.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2018 datagear.tech - * - * Licensed under the LGPLv3 license: - * http://www.gnu.org/licenses/lgpl-3.0.html - */ - -package org.datagear.management.service.impl; - -import java.util.List; -import java.util.Map; - -import org.apache.ibatis.session.SqlSessionFactory; -import org.datagear.management.domain.Role; -import org.datagear.management.domain.RoleUser; -import org.datagear.management.domain.User; -import org.datagear.management.service.RoleUserService; -import org.datagear.management.util.dialect.MbSqlDialect; -import org.datagear.persistence.PagingData; -import org.datagear.persistence.PagingQuery; -import org.datagear.persistence.Query; -import org.mybatis.spring.SqlSessionTemplate; - -/** - * {@linkplain RoleUserService}实现类。 - * - * @author datagear@163.com - * - */ -public class RoleUserServiceImpl extends AbstractMybatisEntityService implements RoleUserService -{ - protected static final String SQL_NAMESPACE = RoleUser.class.getName(); - - public RoleUserServiceImpl() - { - super(); - } - - public RoleUserServiceImpl(SqlSessionFactory sqlSessionFactory, MbSqlDialect dialect) - { - super(sqlSessionFactory, dialect); - } - - public RoleUserServiceImpl(SqlSessionTemplate sqlSessionTemplate, MbSqlDialect dialect) - { - super(sqlSessionTemplate, dialect); - } - - @Override - public RoleUser getByRoleAndUser(Role role, User user) - { - Map paramMap = buildParamMap(); - paramMap.put("role", role); - paramMap.put("user", user); - - return selectOneMybatis("getByRoleAndUser", paramMap); - } - - @Override - public boolean exists(Role role, User user) - { - return (getByRoleAndUser(role, user) != null); - } - - @Override - public boolean[] addIfInexistence(RoleUser... roleUsers) - { - int length = roleUsers.length; - boolean[] re = new boolean[length]; - - for (int i = 0; i < roleUsers.length; i++) - { - RoleUser roleUser = roleUsers[i]; - - if (exists(roleUser.getRole(), roleUser.getUser())) - re[i] = false; - else - { - add(roleUser); - re[i] = true; - } - } - - return re; - } - - @Override - public List queryForRole(Role role, Query query) - { - Map param = buildParamMap(); - param.put("role", role); - - return query("queryForRole", query, param, true); - } - - @Override - public PagingData pagingQueryForRole(Role role, PagingQuery query) - { - Map param = buildParamMap(); - param.put("role", role); - - return pagingQuery("pagingQueryForRole", query, param, true); - } - - @Override - protected String getSqlNamespace() - { - return SQL_NAMESPACE; - } -} diff --git a/datagear-management/src/main/java/org/datagear/management/service/impl/UserServiceImpl.java b/datagear-management/src/main/java/org/datagear/management/service/impl/UserServiceImpl.java index 4661f7c6..c2bf74c3 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/impl/UserServiceImpl.java +++ b/datagear-management/src/main/java/org/datagear/management/service/impl/UserServiceImpl.java @@ -7,16 +7,16 @@ package org.datagear.management.service.impl; +import java.io.Serializable; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.ibatis.session.SqlSessionFactory; import org.datagear.management.domain.Role; -import org.datagear.management.domain.RoleUser; import org.datagear.management.domain.User; import org.datagear.management.service.RoleService; -import org.datagear.management.service.RoleUserService; import org.datagear.management.service.UserService; import org.datagear.management.util.dialect.MbSqlDialect; import org.datagear.util.IDUtil; @@ -32,8 +32,6 @@ public class UserServiceImpl extends AbstractMybatisEntityService { protected static final String SQL_NAMESPACE = User.class.getName(); - private RoleUserService roleUserService; - private RoleService roleService; private UserPasswordEncoder userPasswordEncoder = null; @@ -43,32 +41,20 @@ public class UserServiceImpl extends AbstractMybatisEntityService super(); } - public UserServiceImpl(SqlSessionFactory sqlSessionFactory, MbSqlDialect dialect, RoleUserService roleUserService, + public UserServiceImpl(SqlSessionFactory sqlSessionFactory, MbSqlDialect dialect, RoleService roleService) { super(sqlSessionFactory, dialect); - this.roleUserService = roleUserService; this.roleService = roleService; } - public UserServiceImpl(SqlSessionTemplate sqlSessionTemplate, MbSqlDialect dialect, RoleUserService roleUserService, + public UserServiceImpl(SqlSessionTemplate sqlSessionTemplate, MbSqlDialect dialect, RoleService roleService) { super(sqlSessionTemplate, dialect); - this.roleUserService = roleUserService; this.roleService = roleService; } - public RoleUserService getRoleUserService() - { - return roleUserService; - } - - public void setRoleUserService(RoleUserService roleUserService) - { - this.roleUserService = roleUserService; - } - public RoleService getRoleService() { return roleService; @@ -89,66 +75,21 @@ public class UserServiceImpl extends AbstractMybatisEntityService this.userPasswordEncoder = userPasswordEncoder; } - @Override - protected void add(User entity, Map params) - { - String password = entity.getPassword(); - - if (password != null && !password.isEmpty() && this.userPasswordEncoder != null) - entity.setPassword(this.userPasswordEncoder.encode(password)); - - super.add(entity, params); - - RoleUser roleUser = new RoleUser(IDUtil.randomIdOnTime20(), new Role(Role.ROLE_REGISTRY, ""), entity); - this.roleUserService.add(roleUser); - - Set roles = entity.getRoles(); - - if (roles != null && !roles.isEmpty()) - { - for (Role role : roles) - { - if (Role.ROLE_REGISTRY.equals(role.getId())) - continue; - - RoleUser ru = new RoleUser(IDUtil.randomIdOnTime20(), role, entity); - this.roleUserService.add(ru); - } - } - } - - @Override - protected boolean update(User entity, Map params) - { - String password = entity.getPassword(); - - if (password != null && !password.isEmpty()) - { - if (this.userPasswordEncoder != null) - entity.setPassword(this.userPasswordEncoder.encode(password)); - } - else - entity.setPassword(null); - - return super.update(entity, params); - } - @Override public User getByName(String name) { Map params = buildParamMap(); params.put("name", name); - User user = selectOneMybatis("getByName", params); - postProcessGetNullable(user); + String id = selectOneMybatis("getIdByName", params); - return user; + return getById(id); } @Override public User getByIdNoPassword(String id) { - User user = super.getById(id); + User user = getById(id); user.clearPassword(); return user; @@ -164,9 +105,117 @@ public class UserServiceImpl extends AbstractMybatisEntityService params.put("id", id); params.put("password", newPassword); + cacheEvict(id); + return updateMybatis("updatePasswordById", params) > 0; } + @Override + public boolean updateIgnoreRole(User user) + { + Map params = buildParamMap(); + params.put("ignoreRole", true); + + return update(user, params); + } + + @Override + protected void add(User entity, Map params) + { + String password = entity.getPassword(); + + if (password != null && !password.isEmpty() && this.userPasswordEncoder != null) + entity.setPassword(this.userPasswordEncoder.encode(password)); + + super.add(entity, params); + saveUserRoles(entity); + } + + @Override + protected boolean update(User entity, Map params) + { + String password = entity.getPassword(); + + if (password != null && !password.isEmpty()) + { + if (this.userPasswordEncoder != null) + entity.setPassword(this.userPasswordEncoder.encode(password)); + } + else + entity.setPassword(null); + + boolean updated = super.update(entity, params); + + Boolean ignoreRole = (Boolean) params.get("ignoreRole"); + if (ignoreRole == null || !ignoreRole.booleanValue()) + saveUserRoles(entity); + + return updated; + } + + @Override + protected boolean deleteById(String id, Map params) + { + boolean deleted = super.deleteById(id, params); + deleteUserRoles(id); + + return deleted; + } + + protected void saveUserRoles(User user) + { + // TODO 完成用户编辑页面的角色编辑功能后再开启 + boolean save = false; + + if (save) + { + deleteUserRoles(user.getId()); + + Set roles = user.getRoles(); + if (roles != null && !roles.isEmpty()) + { + Map params = buildParamMap(); + + for (Role role : roles) + { + RoleUser ru = new RoleUser(IDUtil.randomIdOnTime20(), role.getId(), user.getId()); + params.put("entity", ru); + + insertMybatis("insertUserRole", params); + } + } + } + } + + protected void deleteUserRoles(String userId) + { + Map params = buildParamMap(); + params.put("userId", userId); + + deleteMybatis("deleteUserRoles", params); + } + + @Override + protected User getByIdFromDB(String id, Map params) + { + User user = super.getByIdFromDB(id, params); + + Map params1 = buildParamMap(); + params1.put("userId", user.getId()); + + List roleIds = selectListMybatis("getUserRoleIds", params1); + if (roleIds != null && !roleIds.isEmpty()) + { + Set roles = new HashSet(roleIds.size()); + for (String roleId : roleIds) + roles.add(new Role(roleId, roleId)); + + user.setRoles(roles); + } + + return user; + } + @Override protected void postProcessQuery(List list) { @@ -178,10 +227,22 @@ public class UserServiceImpl extends AbstractMybatisEntityService @Override protected User postProcessGet(User obj) { - Set roles = this.roleService.findByUserId(obj.getId()); - obj.setRoles(roles); + Set roles = obj.getRoles(); - return obj; + if (roles != null && !roles.isEmpty()) + { + Set rolesNew = new HashSet(roles.size()); + + for (Role role : roles) + { + role = this.roleService.getById(role.getId()); + rolesNew.add(role); + } + + obj.setRoles(roles); + } + + return super.postProcessGet(obj); } @Override @@ -204,4 +265,55 @@ public class UserServiceImpl extends AbstractMybatisEntityService return SQL_NAMESPACE; } + protected static class RoleUser implements Serializable + { + private static final long serialVersionUID = 1L; + + private String id; + private String roleId; + private String userId; + + public RoleUser() + { + super(); + } + + public RoleUser(String id, String roleId, String userId) + { + super(); + this.id = id; + this.roleId = roleId; + this.userId = userId; + } + + public String getId() + { + return id; + } + + public void setId(String id) + { + this.id = id; + } + + public String getRoleId() + { + return roleId; + } + + public void setRoleId(String roleId) + { + this.roleId = roleId; + } + + public String getUserId() + { + return userId; + } + + public void setUserId(String userId) + { + this.userId = userId; + } + } } diff --git a/datagear-management/src/main/resources/org/datagear/management/mapper/RoleMapper.xml b/datagear-management/src/main/resources/org/datagear/management/mapper/RoleMapper.xml index a53ad60f..4cecf09e 100644 --- a/datagear-management/src/main/resources/org/datagear/management/mapper/RoleMapper.xml +++ b/datagear-management/src/main/resources/org/datagear/management/mapper/RoleMapper.xml @@ -38,18 +38,6 @@ T.${_iq_}id${_iq_} = #{id} - - - SELECT - T.* - FROM - () T - WHERE - T.${_iq_}id${_iq_} = #{id} - - - - - - - - - - - - - - - - - - SELECT - A.RU_ID AS ${_iq_}id${_iq_}, - A.RU_ROLE_ID AS ${_iq_}role.id${_iq_}, - B.ROLE_NAME AS ${_iq_}role.name${_iq_}, - B.ROLE_DESCRIPTION AS ${_iq_}role.description${_iq_}, - B.ROLE_ENABLED AS ${_iq_}role.enabled${_iq_}, - A.RU_USER_ID AS ${_iq_}user.id${_iq_}, - C.USER_NAME AS ${_iq_}user.name${_iq_}, - C.USER_REAL_NAME AS ${_iq_}user.realName${_iq_}, - C.USER_IS_ADMIN AS ${_iq_}user.admin${_iq_}, - C.USER_CREATE_TIME AS ${_iq_}user.createTime${_iq_} - FROM - DATAGEAR_ROLE_USER A - INNER JOIN - DATAGEAR_ROLE B - ON - A.RU_ROLE_ID = B.ROLE_ID - INNER JOIN - DATAGEAR_USER C - ON - A.RU_USER_ID = C.USER_ID - - - - 1 = 1 - - AND - ( - ${_iq_}role.name${_iq_} LIKE #{queryKeyword} - OR ${_iq_}role.description${_iq_} LIKE #{queryKeyword} - OR ${_iq_}user.name${_iq_} LIKE #{queryKeyword} - OR ${_iq_}user.realName${_iq_} LIKE #{queryKeyword} - ) - - - \ No newline at end of file diff --git a/datagear-management/src/main/resources/org/datagear/management/mapper/UserMapper.xml b/datagear-management/src/main/resources/org/datagear/management/mapper/UserMapper.xml index 2631b503..654f993e 100644 --- a/datagear-management/src/main/resources/org/datagear/management/mapper/UserMapper.xml +++ b/datagear-management/src/main/resources/org/datagear/management/mapper/UserMapper.xml @@ -16,6 +16,17 @@ ) + + INSERT INTO DATAGEAR_ROLE_USER + ( + RU_ID, RU_ROLE_ID, RU_USER_ID + ) + VALUES + ( + #{entity.id}, #{entity.roleId}, #{entity.userId} + ) + + UPDATE DATAGEAR_USER SET USER_NAME = #{entity.name}, @@ -42,6 +53,12 @@ USER_ID = #{id} + + DELETE FROM DATAGEAR_ROLE_USER + WHERE + RU_USER_ID = #{userId} + + - SELECT - T.* + USER_ID FROM - () T + DATAGEAR_USER T WHERE - T.${_iq_}name${_iq_} = #{name} + T.USER_NAME = #{name} + + + - @@ -94,21 +93,6 @@ selectOperation 是否选择操作,允许为null }); }); - po.element("input[name=editUserButton]").click(function() - { - po.executeOnSelect(function(row) - { - var options = - { - data : {"id" : row.id} - }; - - $.setGridPageHeightOption(options); - - po.open(po.url("user/pagingQuery"), options); - }); - }); - po.element("input[name=viewButton]").click(function() { po.executeOnSelect(function(row) diff --git a/datagear-web/src/main/resources/org/datagear/web/templates/user/user_form.ftl b/datagear-web/src/main/resources/org/datagear/web/templates/user/user_form.ftl index 3ede3ff6..1ef447c7 100644 --- a/datagear-web/src/main/resources/org/datagear/web/templates/user/user_form.ftl +++ b/datagear-web/src/main/resources/org/datagear/web/templates/user/user_form.ftl @@ -82,8 +82,6 @@ readonly 是否只读操作,允许为null
<#if !readonly> -    -