add access user manager
parent
060039e5f1
commit
a990603d67
@ -0,0 +1,102 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.accessuser.controller;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.annotation.Permission;
|
||||||
|
import com.anji.plus.gaea.bean.ResponseBean;
|
||||||
|
import com.anji.plus.gaea.curd.controller.GaeaBaseController;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anji.plus.gaea.holder.UserContentHolder;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.GaeaUserDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.dao.entity.AccessUser;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.service.AccessUserService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.AccessUserDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.controller.param.AccessUserParam;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc 用户管理 controller
|
||||||
|
* @author 木子李·De <lide1202@hotmail.com>
|
||||||
|
* @date 2019-02-17 08:50:11.902
|
||||||
|
**/
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "用户管理管理")
|
||||||
|
@RequestMapping("/accessUser")
|
||||||
|
@Permission(code = "userManage", name = "用户管理")
|
||||||
|
public class AccessUserController extends GaeaBaseController<AccessUserParam, AccessUser, AccessUserDto> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AccessUserService accessUserService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseService<AccessUserParam, AccessUser> getService() {
|
||||||
|
return accessUserService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AccessUser getEntity() {
|
||||||
|
return new AccessUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AccessUserDto getDTO() {
|
||||||
|
return new AccessUserDto();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户的角色树
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Permission( code = "grantRole", name = "分配角色")
|
||||||
|
@GetMapping("/roleTree/{loginName}")
|
||||||
|
public ResponseBean getRoleTree(@PathVariable("loginName")String loginName){
|
||||||
|
String operator = UserContentHolder.getContext().getUsername();
|
||||||
|
Map map = accessUserService.getRoleTree(loginName, operator);
|
||||||
|
return responseSuccessWithData(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存用户的角色树
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Permission( code = "grantRole", name = "分配角色")
|
||||||
|
@PostMapping("/saveRoleTree")
|
||||||
|
public ResponseBean saveRoleTree(@RequestBody AccessUserDto dto){
|
||||||
|
Boolean data = accessUserService.saveRoleTree(dto);
|
||||||
|
return responseSuccessWithData(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置密码
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Permission( code = "resetPassword", name = "重置密码")
|
||||||
|
@PostMapping({"/resetPassword"})
|
||||||
|
public ResponseBean resetPassword(@RequestBody @Validated GaeaUserDto dto) {
|
||||||
|
Boolean data = accessUserService.resetPassword(dto);
|
||||||
|
return responseSuccessWithData(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 简单实现登录
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping({"/login"})
|
||||||
|
public ResponseBean login(@RequestBody @Validated GaeaUserDto dto) {
|
||||||
|
return responseSuccessWithData(accessUserService.login(dto));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.accessuser.dao.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import com.anji.plus.gaea.curd.entity.GaeaBaseEntity;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import java.util.Date;
|
||||||
|
/**
|
||||||
|
* @description 用户管理 entity
|
||||||
|
* @author 木子李·De <lide1202@hotmail.com>
|
||||||
|
* @date 2019-02-17 08:50:11.902
|
||||||
|
**/
|
||||||
|
@TableName(value="access_user")
|
||||||
|
@Data
|
||||||
|
public class AccessUser extends GaeaBaseEntity {
|
||||||
|
|
||||||
|
/** 登录名 */
|
||||||
|
private String loginName;
|
||||||
|
|
||||||
|
/** 密码 */
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
/** 真实用户 */
|
||||||
|
private String realName;
|
||||||
|
|
||||||
|
/** 手机号码 */
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
/** 用户邮箱 */
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
/** 备注 */
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/** 0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG */
|
||||||
|
private Integer enableFlag;
|
||||||
|
|
||||||
|
/** 0--未删除 1--已删除 DIC_NAME=DEL_FLAG */
|
||||||
|
private Integer deleteFlag;
|
||||||
|
|
||||||
|
/** 最后一次登录IP */
|
||||||
|
private String lastLoginIp;
|
||||||
|
|
||||||
|
/** 最后一次登陆时间 */
|
||||||
|
private Date lastLoginTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.accessuser.service;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.AccessUserDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.GaeaUserDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.dao.entity.AccessUser;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.controller.param.AccessUserParam;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc AccessUser 用户管理服务接口
|
||||||
|
* @author 木子李·De <lide1202@hotmail.com>
|
||||||
|
* @date 2019-02-17 08:50:11.902
|
||||||
|
**/
|
||||||
|
public interface AccessUserService extends GaeaBaseService<AccessUserParam, AccessUser> {
|
||||||
|
|
||||||
|
/** 获取用户的角色树
|
||||||
|
* @param loginName 被操作的对象
|
||||||
|
* @param operator 当前登录者
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map getRoleTree(String loginName, String operator);
|
||||||
|
|
||||||
|
|
||||||
|
/** 保存用户的角色树
|
||||||
|
* @param accessUserDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean saveRoleTree(AccessUserDto accessUserDto);
|
||||||
|
|
||||||
|
/** 重置密码
|
||||||
|
* @param gaeaUserDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean resetPassword(GaeaUserDto gaeaUserDto);
|
||||||
|
|
||||||
|
/** 用户登录
|
||||||
|
* @param gaeaUserDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map login(GaeaUserDto gaeaUserDto);
|
||||||
|
}
|
@ -0,0 +1,158 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.accessuser.service.impl;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.bean.TreeNode;
|
||||||
|
import com.anji.plus.gaea.cache.CacheHelper;
|
||||||
|
import com.anji.plus.gaea.exception.BusinessExceptionBuilder;
|
||||||
|
import com.anji.plus.gaea.utils.GaeaBeanUtils;
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anji.plus.gaea.utils.GaeaUtils;
|
||||||
|
import com.anji.plus.gaea.utils.JwtBean;
|
||||||
|
import com.anjiplus.template.gaea.business.code.ResponseCode;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessrole.dao.AccessRoleMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessrole.dao.entity.AccessRole;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.AccessUserDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.GaeaUserDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.dao.AccessUserRoleMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.dao.entity.AccessUser;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.dao.entity.AccessUserRole;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.service.AccessUserService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.accessuser.dao.AccessUserMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.util.MD5Util;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc AccessUser 用户管理服务实现
|
||||||
|
* @author 木子李·De <lide1202@hotmail.com>
|
||||||
|
* @date 2019-02-17 08:50:11.902
|
||||||
|
**/
|
||||||
|
@Service
|
||||||
|
public class AccessUserServiceImpl implements AccessUserService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AccessRoleMapper accessRoleMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AccessUserMapper accessUserMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AccessUserRoleMapper accessUserRoleMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseMapper<AccessUser> getMapper() {
|
||||||
|
return accessUserMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private JwtBean jwtBean;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CacheHelper cacheHelper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map getRoleTree(String loginName, String operator) {
|
||||||
|
Map<String, Object> result = new HashMap<String, Object>();
|
||||||
|
List<TreeNode> treeData = new ArrayList<>();
|
||||||
|
List checkedKeys = new ArrayList();
|
||||||
|
|
||||||
|
// 角色树
|
||||||
|
LambdaQueryWrapper<AccessRole> roleQuery = Wrappers.lambdaQuery();
|
||||||
|
roleQuery.select(AccessRole::getRoleCode, AccessRole::getRoleName);
|
||||||
|
// 按operator去筛选role 后面再加where
|
||||||
|
List<AccessRole> roleList = accessRoleMapper.selectList(roleQuery);
|
||||||
|
if(roleList == null || roleList.isEmpty()){
|
||||||
|
result.put("treeData", treeData);
|
||||||
|
result.put("checkedKeys", checkedKeys);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
treeData = roleList.stream().map(role -> {
|
||||||
|
TreeNode treeNode = new TreeNode();
|
||||||
|
treeNode.setId(role.getRoleCode());
|
||||||
|
treeNode.setLabel(role.getRoleName());
|
||||||
|
return treeNode;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 该用户已保存的角色
|
||||||
|
LambdaQueryWrapper<AccessUserRole> queryWrapper = Wrappers.lambdaQuery();
|
||||||
|
queryWrapper.select(AccessUserRole::getRoleCode)
|
||||||
|
.eq(AccessUserRole::getLoginName, loginName);
|
||||||
|
checkedKeys = accessUserRoleMapper.selectObjs(queryWrapper);
|
||||||
|
|
||||||
|
result.put("treeData", treeData);
|
||||||
|
result.put("checkedKeys", checkedKeys);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean saveRoleTree(AccessUserDto accessUserDto) {
|
||||||
|
// 校验
|
||||||
|
String loginName = accessUserDto.getLoginName();
|
||||||
|
List<String> roleCodeList = accessUserDto.getRoleCodeList();
|
||||||
|
if(StringUtils.isBlank(loginName)){
|
||||||
|
throw BusinessExceptionBuilder.build(ResponseCode.Not_Empty, loginName);
|
||||||
|
}
|
||||||
|
if(roleCodeList == null || roleCodeList.isEmpty()){
|
||||||
|
throw BusinessExceptionBuilder.build(ResponseCode.Not_Empty, roleCodeList);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 先清除该用户已保存的角色
|
||||||
|
LambdaQueryWrapper<AccessUserRole> wrapper = Wrappers.lambdaQuery();
|
||||||
|
wrapper.eq(AccessUserRole::getLoginName, loginName);
|
||||||
|
accessUserRoleMapper.delete(wrapper);
|
||||||
|
|
||||||
|
// 保存勾选的角色
|
||||||
|
roleCodeList.stream().forEach(roleCode -> {
|
||||||
|
AccessUserRole accessUserRole = new AccessUserRole();
|
||||||
|
accessUserRole.setLoginName(loginName);
|
||||||
|
accessUserRole.setRoleCode(roleCode);
|
||||||
|
accessUserRoleMapper.insert(accessUserRole);
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean resetPassword(GaeaUserDto gaeaUserDto) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map login(GaeaUserDto gaeaUserDto) {
|
||||||
|
|
||||||
|
String loginName = gaeaUserDto.getLoginName();
|
||||||
|
String password = gaeaUserDto.getPassword();
|
||||||
|
//1.判断用户是否存在
|
||||||
|
LambdaQueryWrapper<AccessUser> wrapper = Wrappers.lambdaQuery();
|
||||||
|
wrapper.eq(AccessUser::getLoginName, loginName);
|
||||||
|
AccessUser accessUser = accessUserMapper.selectOne(wrapper);
|
||||||
|
if (null == accessUser || !accessUser.getPassword().equals(MD5Util.encrypt(password))) {
|
||||||
|
throw BusinessExceptionBuilder.build(ResponseCode.LOGIN_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, String> map = Maps.newHashMap();
|
||||||
|
|
||||||
|
//将登录信息缓存,默认一小时
|
||||||
|
if (cacheHelper.exist(loginName)) {
|
||||||
|
map.put("token", cacheHelper.stringGet(loginName));
|
||||||
|
map.put("loginName", loginName);
|
||||||
|
} else {
|
||||||
|
String uuid = GaeaUtils.UUID();
|
||||||
|
String token = jwtBean.createToken(loginName, uuid);
|
||||||
|
cacheHelper.stringSetExpire(loginName, token, 3600);
|
||||||
|
map.put("token", token);
|
||||||
|
map.put("loginName", loginName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue