|
|
|
@ -14,6 +14,8 @@ 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.constant.BusinessConstant; |
|
|
|
import com.anjiplus.template.gaea.business.enums.DeleteFlagEnum; |
|
|
|
import com.anjiplus.template.gaea.business.enums.EnableFlagEnum; |
|
|
|
import com.anjiplus.template.gaea.business.modules.accessrole.dao.AccessRoleAuthorityMapper; |
|
|
|
import com.anjiplus.template.gaea.business.modules.accessrole.dao.AccessRoleMapper; |
|
|
|
import com.anjiplus.template.gaea.business.modules.accessrole.dao.entity.AccessRole; |
|
|
|
@ -216,6 +218,88 @@ public class AccessUserServiceImpl implements AccessUserService { |
|
|
|
return gaeaUser; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public GaeaUserDto directLogin(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 = new AccessUser(); |
|
|
|
accessUser.setLoginName(loginName); |
|
|
|
accessUser.setRealName(loginName); |
|
|
|
accessUser.setEnableFlag(EnableFlagEnum.ENABLE.getCodeValue()); |
|
|
|
accessUser.setDeleteFlag(DeleteFlagEnum.UNDELETED.getCodeValue()); |
|
|
|
accessUser.setCreateTime(new Date()); |
|
|
|
accessUser.setCreateBy(BusinessConstant.USER_ADMIN); |
|
|
|
accessUser.setUpdateTime(new Date()); |
|
|
|
accessUser.setUpdateBy(BusinessConstant.USER_ADMIN); |
|
|
|
accessUser.setVersion(1); |
|
|
|
insert(accessUser); |
|
|
|
//创建用户角色 |
|
|
|
AccessUserDto accessUserDto = new AccessUserDto(); |
|
|
|
accessUserDto.setLoginName(loginName); |
|
|
|
//默认是报表角色 |
|
|
|
accessUserDto.setRoleCodeList(Arrays.asList("excel-report")); |
|
|
|
saveRoleTree(accessUserDto); |
|
|
|
} |
|
|
|
// 2.密码错误 |
|
|
|
if (!accessUser.getPassword().equals(MD5Util.encrypt(password))) { |
|
|
|
throw BusinessExceptionBuilder.build(ResponseCode.USER_PASSWORD_ERROR); |
|
|
|
} |
|
|
|
|
|
|
|
// 3.如果该用户登录未过期,这里允许一个用户在多个终端登录 |
|
|
|
String tokenKey = String.format(BusinessConstant.GAEA_SECURITY_LOGIN_TOKEN, loginName); |
|
|
|
String token = ""; |
|
|
|
GaeaUserDto gaeaUser = new GaeaUserDto(); |
|
|
|
if (cacheHelper.exist(tokenKey)) { |
|
|
|
token = cacheHelper.stringGet(tokenKey); |
|
|
|
} else { |
|
|
|
// 生成用户token |
|
|
|
String uuid = GaeaUtils.UUID(); |
|
|
|
token = jwtBean.createToken(loginName, uuid, 0, GaeaConstant.TENANT_CODE); |
|
|
|
cacheHelper.stringSetExpire(tokenKey, token, 3600); |
|
|
|
} |
|
|
|
|
|
|
|
// 4.读取用户最新人权限主信息 |
|
|
|
String userKey = String.format(BusinessConstant.GAEA_SECURITY_LOGIN_USER, loginName); |
|
|
|
|
|
|
|
//为了兼容底层其他数据库,不再写自定义sql |
|
|
|
// List<String> authorities = accessUserMapper.queryAuthoritiesByLoginName(loginName); |
|
|
|
|
|
|
|
//当前用户的roleCode集合 |
|
|
|
LambdaQueryWrapper<AccessUserRole> accessUserWrapper = Wrappers.lambdaQuery(); |
|
|
|
accessUserWrapper.select(AccessUserRole::getRoleCode); |
|
|
|
accessUserWrapper.eq(AccessUserRole::getLoginName, loginName); |
|
|
|
List<AccessUserRole> accessUserRoles = accessUserRoleMapper.selectList(accessUserWrapper); |
|
|
|
Set<String> roleCodeSet = accessUserRoles.stream().map(AccessUserRole::getRoleCode).collect(Collectors.toSet()); |
|
|
|
if (roleCodeSet.size() < 1) { |
|
|
|
gaeaUser.setAuthorities(new ArrayList<>()); |
|
|
|
}else { |
|
|
|
LambdaQueryWrapper<AccessRoleAuthority> accessRoleAuthorityWrapper = Wrappers.lambdaQuery(); |
|
|
|
accessRoleAuthorityWrapper.select(AccessRoleAuthority::getTarget, AccessRoleAuthority::getAction); |
|
|
|
accessRoleAuthorityWrapper.in(AccessRoleAuthority::getRoleCode, roleCodeSet); |
|
|
|
List<AccessRoleAuthority> accessRoleAuthorities = accessRoleAuthorityMapper.selectList(accessRoleAuthorityWrapper); |
|
|
|
List<String> authorities = accessRoleAuthorities.stream() |
|
|
|
.map(accessRoleAuthority -> accessRoleAuthority.getTarget().concat(":").concat(accessRoleAuthority.getAction())).distinct().collect(Collectors.toList()); |
|
|
|
gaeaUser.setAuthorities(authorities); |
|
|
|
} |
|
|
|
|
|
|
|
gaeaUser.setLoginName(loginName); |
|
|
|
gaeaUser.setRealName(accessUser.getRealName()); |
|
|
|
gaeaUser.setToken(token); |
|
|
|
|
|
|
|
String gaeaUserStr = JSONObject.toJSONString(gaeaUser); |
|
|
|
cacheHelper.stringSetExpire(userKey, gaeaUserStr, 3600); |
|
|
|
|
|
|
|
return gaeaUser; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 修改密码 |
|
|
|
* |
|
|
|
|