feat:add user role

This commit is contained in:
zzs 2024-10-15 15:36:57 +08:00
parent 294d26637b
commit 635495c64c
7 changed files with 194 additions and 2 deletions

View File

@ -0,0 +1,48 @@
package com.ensign.crm.module.crm.job;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ensign.crm.framework.common.enums.CommonStatusEnum;
import com.ensign.crm.framework.quartz.core.handler.JobHandler;
import com.ensign.crm.module.system.api.permission.PermissionApi;
import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO;
import com.ensign.crm.module.system.dal.mysql.user.AdminUserMapper;
import com.ensign.crm.module.system.service.permission.PermissionService;
import com.ensign.crm.module.system.service.permission.RoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @Description: TODO
* @Date: 2024/10/15 11:38
* @Created: by ZZSLL
*/
@Slf4j
@Component
public class UserAllocationTask implements JobHandler {
@Autowired
private AdminUserMapper userMapper;
@Autowired
private PermissionService permissionService;
@Override
public String execute(String param) {
LambdaQueryWrapper<AdminUserDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AdminUserDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
.eq(AdminUserDO::getIsSyncKingdee, CommonStatusEnum.ENABLE.getStatus());
List<AdminUserDO> users = userMapper.selectList(queryWrapper);
for (AdminUserDO user : users) {
permissionService.assignPermissions(user);
}
return "success";
}
}

View File

@ -45,5 +45,4 @@ public interface PermissionApi {
* @return 部门数据权限
*/
DeptDataPermissionRespDTO getDeptDataPermission(Long userId);
}

View File

@ -0,0 +1,69 @@
package com.ensign.crm.module.system.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Classname UserFunctionRoleEnum
* @Description
*
* 1:厂家后台
* 2:区域经理
* 3:业务经理
* 4:经销商后台
* 5:经销商销售员
*
* @Date 2024/10/15 11:41
* @Created by violet
*/
@Getter
@AllArgsConstructor
public enum UserFunctionRoleEnum {
FACTORY_BACKEND(1, "CRM_role_1"),
REGIONAL_MANAGER(2, "CRM_role_2"),
BUSINESS_MANAGER(3, "CRM_role_3"),
DEALER_BACKEND(4, "CRM_role_4"),
DEALER_SALESMAN(5, "CRM_role_5");
private final Integer userFunc;
private final String roleName;
private static final Map<Integer, String> MAP = new HashMap<>();
private static final List<String> LIST = new ArrayList<>();
static {
for (UserFunctionRoleEnum role : UserFunctionRoleEnum.values()) {
MAP.put(role.getUserFunc(), role.getRoleName());
LIST.add(role.getRoleName());
}
}
public static String getRoleName(Integer userFunc) {
return MAP.get(userFunc);
}
public static List<String> getAllRoleName() {
return LIST;
}
public static List<String> get(Integer... func) {
List<String> roleNames = new ArrayList<>();
for (Integer f : func) {
String roleName = UserFunctionRoleEnum.getRoleName(f);
if (roleName != null) {
roleNames.add(roleName);
}
}
return roleNames;
}
}

View File

@ -1,6 +1,7 @@
package com.ensign.crm.module.system.service.permission;
import com.ensign.crm.module.system.api.permission.dto.DeptDataPermissionRespDTO;
import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO;
import java.util.Collection;
import java.util.Set;
@ -143,4 +144,5 @@ public interface PermissionService {
*/
DeptDataPermissionRespDTO getDeptDataPermission(Long userId);
void assignPermissions(AdminUserDO user);
}

View File

@ -7,11 +7,14 @@ import cn.hutool.extra.spring.SpringUtil;
import com.ensign.crm.framework.common.enums.CommonStatusEnum;
import com.ensign.crm.framework.common.util.collection.CollectionUtils;
import com.ensign.crm.framework.datapermission.core.annotation.DataPermission;
import com.ensign.crm.module.system.api.permission.PermissionApi;
import com.ensign.crm.module.system.api.permission.dto.DeptDataPermissionRespDTO;
import com.ensign.crm.module.system.constant.UserFunctionRoleEnum;
import com.ensign.crm.module.system.dal.dataobject.permission.MenuDO;
import com.ensign.crm.module.system.dal.dataobject.permission.RoleDO;
import com.ensign.crm.module.system.dal.dataobject.permission.RoleMenuDO;
import com.ensign.crm.module.system.dal.dataobject.permission.UserRoleDO;
import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO;
import com.ensign.crm.module.system.dal.mysql.permission.RoleMenuMapper;
import com.ensign.crm.module.system.dal.mysql.permission.UserRoleMapper;
import com.ensign.crm.module.system.dal.redis.RedisKeyConstants;
@ -59,6 +62,9 @@ public class PermissionServiceImpl implements PermissionService {
@Resource
private AdminUserService userService;
@Resource
private PermissionApi permissionApi;
@Override
public boolean hasAnyPermissions(Long userId, String... permissions) {
// 如果为空说明已经有权限
@ -86,7 +92,7 @@ public class PermissionServiceImpl implements PermissionService {
/**
* 判断指定角色是否拥有该 permission 权限
*
* @param roles 指定角色数组
* @param roles 指定角色数组
* @param permission 权限标识
* @return 是否拥有
*/
@ -334,4 +340,56 @@ public class PermissionServiceImpl implements PermissionService {
return SpringUtil.getBean(getClass());
}
@Override
public void assignPermissions(AdminUserDO user) {
Integer userFunction = user.getCrmUserFunction();
if (userFunction == null) {
return;
}
if (!"12345".contains(userFunction.toString())) {
return;
}
Long userId = user.getId();
List<String> rules = getRoleList(userFunction);
Set<String> noRoles = new HashSet<>();
for (String rule : rules) {
boolean hassed = permissionApi.hasAnyRoles(userId, rule);
if (!hassed) {
noRoles.add(rule);
}
}
if (!noRoles.isEmpty()) {
doAssignPermissions(user, noRoles);
}
}
private void doAssignPermissions(AdminUserDO user, Set<String> noRoles) {
Set<Long> ids = roleService.getRoleIds(noRoles);
assignUserRole(user.getId(), ids);
}
private List<String> getRoleList(Integer userFunction) {
List<String> roles = new ArrayList<>();
roles.add("crmuser");
switch (userFunction) {
case 1:
roles.addAll(UserFunctionRoleEnum.get(1, 2, 3, 4, 5));
break;
case 2:
roles.addAll(UserFunctionRoleEnum.get(1, 2, 3, 4));
break;
case 3:
roles.addAll(UserFunctionRoleEnum.get(1, 2, 3));
break;
case 4:
roles.addAll(UserFunctionRoleEnum.get(1, 2));
break;
case 5:
roles.addAll(UserFunctionRoleEnum.get(1));
break;
}
return roles;
}
}

View File

@ -121,4 +121,5 @@ public interface RoleService {
*/
void validateRoleList(Collection<Long> ids);
Set<Long> getRoleIds(Set<String> noRoles);
}

View File

@ -4,10 +4,12 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ensign.crm.framework.common.enums.CommonStatusEnum;
import com.ensign.crm.framework.common.pojo.PageResult;
import com.ensign.crm.framework.common.util.collection.CollectionUtils;
import com.ensign.crm.framework.common.util.object.BeanUtils;
import com.ensign.crm.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.ensign.crm.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import com.ensign.crm.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
import com.ensign.crm.module.system.dal.dataobject.permission.RoleDO;
@ -258,4 +260,17 @@ public class RoleServiceImpl implements RoleService {
return SpringUtil.getBean(getClass());
}
@Override
public Set<Long> getRoleIds(Set<String> noRoles) {
LambdaQueryWrapperX<RoleDO> queryWrapperX = new LambdaQueryWrapperX<>();
queryWrapperX.eq(RoleDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
.in(RoleDO::getCode, noRoles);
List<RoleDO> roleDOS = roleMapper.selectList(queryWrapperX);
Set<Long> roleIds = new HashSet<>();
roleDOS.forEach(roleDO -> {
roleIds.add(roleDO.getId());
});
return roleIds;
}
}