1
|
1
|
package org.thingsboard.server.dao.yunteng.impl;
|
2
|
2
|
|
|
3
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
3
|
4
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
4
|
5
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
5
|
6
|
import com.google.common.collect.Sets;
|
...
|
...
|
@@ -17,11 +18,9 @@ import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; |
17
|
18
|
import org.thingsboard.server.common.data.yunteng.dto.RoleDTO;
|
18
|
19
|
import org.thingsboard.server.common.data.yunteng.dto.request.RoleReqDTO;
|
19
|
20
|
import org.thingsboard.server.common.data.yunteng.enums.RoleEnum;
|
|
21
|
+import org.thingsboard.server.common.data.yunteng.enums.StatusEnum;
|
20
|
22
|
import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
|
21
|
|
-import org.thingsboard.server.dao.yunteng.entities.SysRoleEntity;
|
22
|
|
-import org.thingsboard.server.dao.yunteng.entities.SysTenantMenuEntity;
|
23
|
|
-import org.thingsboard.server.dao.yunteng.entities.SysTenantRoleEntity;
|
24
|
|
-import org.thingsboard.server.dao.yunteng.entities.SysUserRoleEntity;
|
|
23
|
+import org.thingsboard.server.dao.yunteng.entities.*;
|
25
|
24
|
import org.thingsboard.server.dao.yunteng.mapper.*;
|
26
|
25
|
import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
|
27
|
26
|
import org.thingsboard.server.dao.yunteng.service.MenuService;
|
...
|
...
|
@@ -33,224 +32,255 @@ import java.util.stream.Collectors; |
33
|
32
|
@Service
|
34
|
33
|
@Slf4j
|
35
|
34
|
@RequiredArgsConstructor
|
36
|
|
-public class SysRoleServiceImpl extends AbstractBaseService<RoleMapper, SysRoleEntity> implements RoleService {
|
|
35
|
+public class SysRoleServiceImpl extends AbstractBaseService<RoleMapper, SysRoleEntity>
|
|
36
|
+ implements RoleService {
|
37
|
37
|
|
38
|
|
- private final MenuMapper menuMapper;
|
39
|
|
- private final CacheUtils cacheUtils;
|
40
|
|
- private final MenuService menuService;
|
41
|
|
- private final TenantMenuMapper tenantMenuMapper;
|
42
|
|
- private final TenantRoleMapper tenantRoleMapper;
|
43
|
|
- private final UserRoleMapper userRoleMapper;
|
|
38
|
+ private final MenuMapper menuMapper;
|
|
39
|
+ private final CacheUtils cacheUtils;
|
|
40
|
+ private final MenuService menuService;
|
|
41
|
+ private final TenantMenuMapper tenantMenuMapper;
|
|
42
|
+ private final TenantRoleMapper tenantRoleMapper;
|
|
43
|
+ private final UserRoleMapper userRoleMapper;
|
|
44
|
+ private final UserMapper userMapper;
|
44
|
45
|
|
45
|
|
- @Override
|
46
|
|
- public TkPageData<RoleDTO> page(String tenantId, Map<String, Object> queryMap) {
|
47
|
|
- IPage<SysRoleEntity> roleIPage =
|
48
|
|
- baseMapper.selectPage(
|
49
|
|
- getPage(queryMap, "create_time", false),
|
50
|
|
- new QueryWrapper<SysRoleEntity>()
|
51
|
|
- .lambda()
|
52
|
|
- .eq(queryMap.get("status") != null, SysRoleEntity::isEnabled, queryMap.get("status"))
|
53
|
|
- .eq(queryMap.get("roleType") != null, SysRoleEntity::getRoleType, queryMap.get("roleType"))
|
54
|
|
- .ne(queryMap.get("roleType") == null, SysRoleEntity::getRoleType, RoleEnum.TENANT_ADMIN.name())
|
55
|
|
- .eq(SysRoleEntity::getTenantId, tenantId)
|
56
|
|
- .like(
|
57
|
|
- queryMap.get("roleName") != null,
|
58
|
|
- SysRoleEntity::getName,
|
59
|
|
- String.valueOf(queryMap.get("roleName"))));
|
60
|
|
- return getPageData(roleIPage, RoleDTO.class);
|
|
46
|
+ @Override
|
|
47
|
+ public TkPageData<RoleDTO> page(String tenantId, Map<String, Object> queryMap) {
|
|
48
|
+ IPage<SysRoleEntity> roleIPage =
|
|
49
|
+ baseMapper.selectPage(
|
|
50
|
+ getPage(queryMap, "create_time", false),
|
|
51
|
+ new QueryWrapper<SysRoleEntity>()
|
|
52
|
+ .lambda()
|
|
53
|
+ .eq(
|
|
54
|
+ queryMap.get("status") != null,
|
|
55
|
+ SysRoleEntity::isEnabled,
|
|
56
|
+ queryMap.get("status"))
|
|
57
|
+ .eq(
|
|
58
|
+ queryMap.get("roleType") != null,
|
|
59
|
+ SysRoleEntity::getRoleType,
|
|
60
|
+ queryMap.get("roleType"))
|
|
61
|
+ .ne(
|
|
62
|
+ queryMap.get("roleType") == null,
|
|
63
|
+ SysRoleEntity::getRoleType,
|
|
64
|
+ RoleEnum.TENANT_ADMIN.name())
|
|
65
|
+ .eq(SysRoleEntity::getTenantId, tenantId)
|
|
66
|
+ .like(
|
|
67
|
+ queryMap.get("roleName") != null,
|
|
68
|
+ SysRoleEntity::getName,
|
|
69
|
+ String.valueOf(queryMap.get("roleName"))));
|
|
70
|
+ return getPageData(roleIPage, RoleDTO.class);
|
|
71
|
+ }
|
|
72
|
+
|
|
73
|
+ @Override
|
|
74
|
+ @Transactional
|
|
75
|
+ public boolean deleteRole(String[] roleIds, String tenantId) {
|
|
76
|
+ Set<String> ids = Set.of(roleIds);
|
|
77
|
+ int notTenantMenuCount =
|
|
78
|
+ baseMapper.selectCount(
|
|
79
|
+ new QueryWrapper<SysRoleEntity>()
|
|
80
|
+ .lambda()
|
|
81
|
+ .ne(SysRoleEntity::getTenantId, tenantId)
|
|
82
|
+ .in(SysRoleEntity::getId, ids));
|
|
83
|
+ if (notTenantMenuCount > 0) {
|
|
84
|
+ throw new AccessDeniedException("只能删除自己创建的角色");
|
|
85
|
+ }
|
|
86
|
+ // 判断该角色下面是否有用户
|
|
87
|
+ Set<String> userIds = baseMapper.checkRoleUserMappingByRoleIds(ids);
|
|
88
|
+ if (null != userIds && userIds.size() > 0) {
|
|
89
|
+ throw new TkDataValidationException(ErrorMessage.ROLE_IN_USE.getMessage());
|
61
|
90
|
}
|
|
91
|
+ // delete sys_role_menu mapping
|
|
92
|
+ baseMapper.deleteRoleMenuMappingByRoleIds(ids);
|
|
93
|
+ // delete role
|
|
94
|
+ baseMapper.deleteBatchIds(ids);
|
|
95
|
+ // FIXME 频繁删除role造成缓存效果不大
|
|
96
|
+ cacheUtils.invalidateCacheName(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY);
|
|
97
|
+ return true;
|
|
98
|
+ }
|
62
|
99
|
|
63
|
|
- @Override
|
64
|
|
- @Transactional
|
65
|
|
- public boolean deleteRole(String[] roleIds, String tenantId) {
|
66
|
|
- Set<String> ids = Set.of(roleIds);
|
67
|
|
- int notTenantMenuCount =
|
68
|
|
- baseMapper.selectCount(
|
69
|
|
- new QueryWrapper<SysRoleEntity>().lambda().ne(SysRoleEntity::getTenantId, tenantId).in(SysRoleEntity::getId, ids));
|
70
|
|
- if (notTenantMenuCount > 0) {
|
71
|
|
- throw new AccessDeniedException("只能删除自己创建的角色");
|
72
|
|
- }
|
73
|
|
- // 判断该角色下面是否有用户
|
74
|
|
- Set<String> userIds = baseMapper.checkRoleUserMappingByRoleIds(ids);
|
75
|
|
- if (null != userIds && userIds.size() > 0) {
|
76
|
|
- throw new TkDataValidationException(ErrorMessage.ROLE_IN_USE.getMessage());
|
77
|
|
- }
|
78
|
|
- // delete sys_role_menu mapping
|
79
|
|
- baseMapper.deleteRoleMenuMappingByRoleIds(ids);
|
80
|
|
- // delete role
|
81
|
|
- baseMapper.deleteBatchIds(ids);
|
82
|
|
- // FIXME 频繁删除role造成缓存效果不大
|
83
|
|
- cacheUtils.invalidateCacheName(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY);
|
84
|
|
- return true;
|
|
100
|
+ @Override
|
|
101
|
+ public Set<String> getPermissions(
|
|
102
|
+ boolean isSysadmin, boolean isTenantAdmin, String tenantId, String useerId) {
|
|
103
|
+ Set<String> permissions = Sets.newHashSet();
|
|
104
|
+ Set<String> allPermission;
|
|
105
|
+ String cacheKey;
|
|
106
|
+ boolean cachePresent;
|
|
107
|
+ if (isSysadmin) {
|
|
108
|
+ cacheKey = FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + RoleEnum.SYS_ADMIN.name();
|
|
109
|
+ Optional<Set<String>> optionalPermission =
|
|
110
|
+ cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey);
|
|
111
|
+ cachePresent = optionalPermission.isPresent();
|
|
112
|
+ allPermission = optionalPermission.orElseGet(menuMapper::getAllPermission);
|
|
113
|
+ } else if (isTenantAdmin) {
|
|
114
|
+ cacheKey = FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + tenantId;
|
|
115
|
+ Optional<Set<String>> optionalPermission =
|
|
116
|
+ cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey);
|
|
117
|
+ cachePresent = optionalPermission.isPresent();
|
|
118
|
+ allPermission =
|
|
119
|
+ optionalPermission.orElseGet(() -> menuMapper.getAllPermissionsByTenantId(tenantId));
|
|
120
|
+ } else {
|
|
121
|
+ cacheKey = FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + useerId;
|
|
122
|
+ Optional<Set<String>> optionalPermission =
|
|
123
|
+ cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey);
|
|
124
|
+ cachePresent = optionalPermission.isPresent();
|
|
125
|
+ allPermission =
|
|
126
|
+ optionalPermission.orElseGet(() -> menuMapper.getAllPermissionsByUserId(useerId));
|
|
127
|
+ }
|
|
128
|
+ if (cachePresent) {
|
|
129
|
+ return allPermission;
|
|
130
|
+ } else {
|
|
131
|
+ allPermission.forEach(
|
|
132
|
+ permission -> permissions.addAll(Sets.newHashSet(permission.split(","))));
|
|
133
|
+ cacheUtils.put(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey, permissions);
|
85
|
134
|
}
|
|
135
|
+ return permissions;
|
|
136
|
+ }
|
86
|
137
|
|
87
|
|
- @Override
|
88
|
|
- public Set<String> getPermissions(
|
89
|
|
- boolean isSysadmin, boolean isTenantAdmin, String tenantId, String useerId) {
|
90
|
|
- Set<String> permissions = Sets.newHashSet();
|
91
|
|
- Set<String> allPermission;
|
92
|
|
- String cacheKey;
|
93
|
|
- boolean cachePresent;
|
94
|
|
- if (isSysadmin) {
|
95
|
|
- cacheKey = FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + RoleEnum.SYS_ADMIN.name();
|
96
|
|
- Optional<Set<String>> optionalPermission =
|
97
|
|
- cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey);
|
98
|
|
- cachePresent = optionalPermission.isPresent();
|
99
|
|
- allPermission = optionalPermission.orElseGet(menuMapper::getAllPermission);
|
100
|
|
- } else if (isTenantAdmin) {
|
101
|
|
- cacheKey = FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + tenantId;
|
102
|
|
- Optional<Set<String>> optionalPermission =
|
103
|
|
- cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey);
|
104
|
|
- cachePresent = optionalPermission.isPresent();
|
105
|
|
- allPermission =
|
106
|
|
- optionalPermission.orElseGet(() -> menuMapper.getAllPermissionsByTenantId(tenantId));
|
107
|
|
- } else {
|
108
|
|
- cacheKey = FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + useerId;
|
109
|
|
- Optional<Set<String>> optionalPermission =
|
110
|
|
- cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey);
|
111
|
|
- cachePresent = optionalPermission.isPresent();
|
112
|
|
- allPermission =
|
113
|
|
- optionalPermission.orElseGet(() -> menuMapper.getAllPermissionsByUserId(useerId));
|
|
138
|
+ @Override
|
|
139
|
+ @Transactional
|
|
140
|
+ public void updateRoleStatus(String roleId, int status, boolean isSysadmin, String tenantId) {
|
|
141
|
+ if (status == StatusEnum.DISABLE.getIndex()) {
|
|
142
|
+ List<SysUserRoleEntity> entities =
|
|
143
|
+ userRoleMapper.selectList(
|
|
144
|
+ new LambdaQueryWrapper<SysUserRoleEntity>().eq(SysUserRoleEntity::getRoleId, roleId));
|
|
145
|
+ if (null != entities && !entities.isEmpty()) {
|
|
146
|
+ SysUserEntity entity = userMapper.selectById(entities.get(0).getUserId());
|
|
147
|
+ if (null != entity) {
|
|
148
|
+ throw new TkDataValidationException(
|
|
149
|
+ String.format(ErrorMessage.CURRENT_ROLE_IN_USE.getMessage(), entity.getRealName()));
|
114
|
150
|
}
|
115
|
|
- if (cachePresent) {
|
116
|
|
- return allPermission;
|
117
|
|
- } else {
|
118
|
|
- allPermission.forEach(
|
119
|
|
- permission -> permissions.addAll(Sets.newHashSet(permission.split(","))));
|
120
|
|
- cacheUtils.put(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey, permissions);
|
121
|
|
- }
|
122
|
|
- return permissions;
|
|
151
|
+ }
|
123
|
152
|
}
|
|
153
|
+ Optional.ofNullable(
|
|
154
|
+ baseMapper.selectOne(
|
|
155
|
+ new QueryWrapper<SysRoleEntity>()
|
|
156
|
+ .lambda()
|
|
157
|
+ .eq(SysRoleEntity::getId, roleId)
|
|
158
|
+ .eq(!isSysadmin, SysRoleEntity::getTenantId, tenantId)))
|
|
159
|
+ .ifPresent(
|
|
160
|
+ role -> {
|
|
161
|
+ role.setEnabled(status == 1);
|
|
162
|
+ baseMapper.updateById(role);
|
|
163
|
+ });
|
|
164
|
+ }
|
124
|
165
|
|
125
|
|
- @Override
|
126
|
|
- @Transactional
|
127
|
|
- public void updateRoleStatus(String roleId, int status, boolean isSysadmin, String tenantId) {
|
128
|
|
- Optional.ofNullable(
|
129
|
|
- baseMapper.selectOne(
|
130
|
|
- new QueryWrapper<SysRoleEntity>()
|
131
|
|
- .lambda()
|
132
|
|
- .eq(SysRoleEntity::getId, roleId)
|
133
|
|
- .eq(!isSysadmin, SysRoleEntity::getTenantId, tenantId)))
|
134
|
|
- .ifPresent(
|
135
|
|
- role -> {
|
136
|
|
- role.setEnabled(status == 1);
|
137
|
|
- baseMapper.updateById(role);
|
138
|
|
- });
|
|
166
|
+ @Override
|
|
167
|
+ @Transactional
|
|
168
|
+ public RoleDTO saveOrUpdateRoleInfoWithMenu(
|
|
169
|
+ RoleReqDTO roleReqDTO, boolean isSysadmin, boolean isPlatformAdmin, String tenantId) {
|
|
170
|
+ SysRoleEntity role;
|
|
171
|
+ // 默认普通管理员角色,即租户管理员添加的角色
|
|
172
|
+ var roleType = RoleEnum.CUSTOMER_USER.name();
|
|
173
|
+ if (null != roleReqDTO.getRoleType()) {
|
|
174
|
+ roleType = roleReqDTO.getRoleType().name();
|
|
175
|
+ } else {
|
|
176
|
+ if (isSysadmin || isPlatformAdmin) {
|
|
177
|
+ roleType = RoleEnum.PLATFORM_ADMIN.name();
|
|
178
|
+ }
|
139
|
179
|
}
|
140
|
|
-
|
141
|
|
- @Override
|
142
|
|
- @Transactional
|
143
|
|
- public RoleDTO saveOrUpdateRoleInfoWithMenu(
|
144
|
|
- RoleReqDTO roleReqDTO, boolean isSysadmin, boolean isPlatformAdmin, String tenantId) {
|
145
|
|
- SysRoleEntity role;
|
146
|
|
- // 默认普通管理员角色,即租户管理员添加的角色
|
147
|
|
- var roleType = RoleEnum.CUSTOMER_USER.name();
|
148
|
|
- if (null != roleReqDTO.getRoleType()) {
|
149
|
|
- roleType = roleReqDTO.getRoleType().name();
|
150
|
|
- } else {
|
151
|
|
- if (isSysadmin || isPlatformAdmin) {
|
152
|
|
- roleType = RoleEnum.PLATFORM_ADMIN.name();
|
153
|
|
- }
|
154
|
|
- }
|
155
|
|
- boolean update = StringUtils.isNotBlank(roleReqDTO.getId());
|
156
|
|
- if (update) {
|
157
|
|
- // do update
|
158
|
|
- role =
|
159
|
|
- baseMapper.selectOne(
|
160
|
|
- new QueryWrapper<SysRoleEntity>()
|
161
|
|
- .lambda()
|
162
|
|
- .eq(SysRoleEntity::getId, roleReqDTO.getId())
|
163
|
|
- .eq(!isSysadmin, SysRoleEntity::getTenantId, tenantId));
|
164
|
|
- if (role == null) {
|
165
|
|
- return null;
|
166
|
|
- } else {
|
167
|
|
- role.setRemark(roleReqDTO.getRemark());
|
168
|
|
- role.setName(roleReqDTO.getName());
|
169
|
|
- role.setEnabled(roleReqDTO.getStatus() == 1);
|
170
|
|
- baseMapper.updateById(role);
|
171
|
|
- }
|
|
180
|
+ boolean update = StringUtils.isNotBlank(roleReqDTO.getId());
|
|
181
|
+ if (update) {
|
|
182
|
+ // do update
|
|
183
|
+ role =
|
|
184
|
+ baseMapper.selectOne(
|
|
185
|
+ new QueryWrapper<SysRoleEntity>()
|
|
186
|
+ .lambda()
|
|
187
|
+ .eq(SysRoleEntity::getId, roleReqDTO.getId())
|
|
188
|
+ .eq(!isSysadmin, SysRoleEntity::getTenantId, tenantId));
|
|
189
|
+ if (role == null) {
|
|
190
|
+ return null;
|
|
191
|
+ } else {
|
|
192
|
+ role.setRemark(roleReqDTO.getRemark());
|
|
193
|
+ role.setName(roleReqDTO.getName());
|
|
194
|
+ role.setEnabled(roleReqDTO.getStatus() == 1);
|
|
195
|
+ baseMapper.updateById(role);
|
|
196
|
+ }
|
|
197
|
+ } else {
|
|
198
|
+ // do save
|
|
199
|
+ role = new SysRoleEntity();
|
|
200
|
+ role.setRoleType(roleType);
|
|
201
|
+ role.setCode(RandomStringUtils.randomAlphabetic(10));
|
|
202
|
+ role.setRemark(roleReqDTO.getRemark());
|
|
203
|
+ role.setName(roleReqDTO.getName());
|
|
204
|
+ role.setEnabled(roleReqDTO.getStatus() == 1);
|
|
205
|
+ role.setTenantId(tenantId);
|
|
206
|
+ baseMapper.insert(role);
|
|
207
|
+ }
|
|
208
|
+ Set<String> oldMenus = menuMapper.selectRoleMenuIds(role.getId());
|
|
209
|
+ // do update or save menu associate with this roleId
|
|
210
|
+ menuService.assignMenuToRole(
|
|
211
|
+ roleReqDTO.getMenu().toArray(new String[roleReqDTO.getMenu().size()]), role.getId());
|
|
212
|
+ // 如果是租户管理员角色并且是更新,则需要更新租户菜单表
|
|
213
|
+ if (role.getRoleType().equals(RoleEnum.TENANT_ADMIN.name()) && update) {
|
|
214
|
+ List<String> newMenus = roleReqDTO.getMenu();
|
|
215
|
+ Set<String> removeMenus = new HashSet<>();
|
|
216
|
+ for (String menu : oldMenus) {
|
|
217
|
+ if (newMenus.contains(menu)) {
|
|
218
|
+ newMenus.remove(menu);
|
172
|
219
|
} else {
|
173
|
|
- // do save
|
174
|
|
- role = new SysRoleEntity();
|
175
|
|
- role.setRoleType(roleType);
|
176
|
|
- role.setCode(RandomStringUtils.randomAlphabetic(10));
|
177
|
|
- role.setRemark(roleReqDTO.getRemark());
|
178
|
|
- role.setName(roleReqDTO.getName());
|
179
|
|
- role.setEnabled(roleReqDTO.getStatus() == 1);
|
180
|
|
- role.setTenantId(tenantId);
|
181
|
|
- baseMapper.insert(role);
|
|
220
|
+ removeMenus.add(menu);
|
182
|
221
|
}
|
183
|
|
- Set<String> oldMenus = menuMapper.selectRoleMenuIds(role.getId());
|
184
|
|
- // do update or save menu associate with this roleId
|
185
|
|
- menuService.assignMenuToRole(
|
186
|
|
- roleReqDTO.getMenu().toArray(new String[roleReqDTO.getMenu().size()]), role.getId());
|
187
|
|
- // 如果是租户管理员角色并且是更新,则需要更新租户菜单表
|
188
|
|
- if (role.getRoleType().equals(RoleEnum.TENANT_ADMIN.name()) && update) {
|
189
|
|
- List<String> newMenus = roleReqDTO.getMenu();
|
190
|
|
- Set<String> removeMenus = new HashSet<>();
|
191
|
|
- for(String menu: oldMenus){
|
192
|
|
- if(newMenus.contains(menu)){
|
193
|
|
- newMenus.remove(menu);
|
194
|
|
- }else{
|
195
|
|
- removeMenus.add(menu);
|
196
|
|
- }
|
197
|
|
- }
|
198
|
|
- // 先删除以前的租户菜单,再更新新的租户菜单
|
199
|
|
- // 1、查询这个角色有几个租户用户
|
200
|
|
- // 2、删除并更新对应租户的信息
|
201
|
|
- // 3、超级管理员删除租户角色菜单时,同步删除租户内客户角色的权限,租户ID+菜单ID
|
202
|
|
- List<SysTenantRoleEntity> tenantRoles =
|
203
|
|
- tenantRoleMapper.selectList(
|
204
|
|
- new QueryWrapper<SysTenantRoleEntity>().lambda().eq(SysTenantRoleEntity::getRoleId, role.getId()));
|
205
|
|
- tenantRoles.forEach(
|
206
|
|
- tenantRole -> {
|
207
|
|
- String updateTenantId = tenantRole.getTenantId();
|
208
|
|
-
|
209
|
|
- if(!removeMenus.isEmpty()){
|
210
|
|
- //刷新租户的菜单
|
211
|
|
- tenantMenuMapper.delete(
|
212
|
|
- new QueryWrapper<SysTenantMenuEntity>()
|
213
|
|
- .lambda()
|
214
|
|
- .eq(SysTenantMenuEntity::getTenantId, updateTenantId)
|
215
|
|
- .in(SysTenantMenuEntity::getMenuId,removeMenus));
|
216
|
|
- //刷新客户的菜单
|
217
|
|
- List<SysRoleEntity> customerRoles = baseMapper.selectList(
|
218
|
|
- new QueryWrapper<SysRoleEntity>()
|
219
|
|
- .lambda()
|
220
|
|
- .eq(SysRoleEntity::getTenantId, updateTenantId)
|
221
|
|
- .eq(SysRoleEntity::getRoleType,RoleEnum.CUSTOMER_USER.name()));
|
222
|
|
- customerRoles.forEach(cr -> menuMapper.removeMenuFromRole(cr.getId(),removeMenus));
|
223
|
|
- }
|
224
|
|
- newMenus.forEach(
|
225
|
|
- menu -> {
|
226
|
|
- SysTenantMenuEntity tenantMenu = new SysTenantMenuEntity();
|
227
|
|
- tenantMenu.setMenuId(menu);
|
228
|
|
- tenantMenu.setTenantId(updateTenantId);
|
229
|
|
- tenantMenuMapper.insert(tenantMenu);
|
230
|
|
- });
|
|
222
|
+ }
|
|
223
|
+ // 先删除以前的租户菜单,再更新新的租户菜单
|
|
224
|
+ // 1、查询这个角色有几个租户用户
|
|
225
|
+ // 2、删除并更新对应租户的信息
|
|
226
|
+ // 3、超级管理员删除租户角色菜单时,同步删除租户内客户角色的权限,租户ID+菜单ID
|
|
227
|
+ List<SysTenantRoleEntity> tenantRoles =
|
|
228
|
+ tenantRoleMapper.selectList(
|
|
229
|
+ new QueryWrapper<SysTenantRoleEntity>()
|
|
230
|
+ .lambda()
|
|
231
|
+ .eq(SysTenantRoleEntity::getRoleId, role.getId()));
|
|
232
|
+ tenantRoles.forEach(
|
|
233
|
+ tenantRole -> {
|
|
234
|
+ String updateTenantId = tenantRole.getTenantId();
|
231
|
235
|
|
232
|
|
- });
|
233
|
|
- }
|
234
|
|
- cacheUtils.invalidateCacheName(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY);
|
235
|
|
- return role.getDTO(RoleDTO.class);
|
|
236
|
+ if (!removeMenus.isEmpty()) {
|
|
237
|
+ // 刷新租户的菜单
|
|
238
|
+ tenantMenuMapper.delete(
|
|
239
|
+ new QueryWrapper<SysTenantMenuEntity>()
|
|
240
|
+ .lambda()
|
|
241
|
+ .eq(SysTenantMenuEntity::getTenantId, updateTenantId)
|
|
242
|
+ .in(SysTenantMenuEntity::getMenuId, removeMenus));
|
|
243
|
+ // 刷新客户的菜单
|
|
244
|
+ List<SysRoleEntity> customerRoles =
|
|
245
|
+ baseMapper.selectList(
|
|
246
|
+ new QueryWrapper<SysRoleEntity>()
|
|
247
|
+ .lambda()
|
|
248
|
+ .eq(SysRoleEntity::getTenantId, updateTenantId)
|
|
249
|
+ .eq(SysRoleEntity::getRoleType, RoleEnum.CUSTOMER_USER.name()));
|
|
250
|
+ customerRoles.forEach(cr -> menuMapper.removeMenuFromRole(cr.getId(), removeMenus));
|
|
251
|
+ }
|
|
252
|
+ newMenus.forEach(
|
|
253
|
+ menu -> {
|
|
254
|
+ SysTenantMenuEntity tenantMenu = new SysTenantMenuEntity();
|
|
255
|
+ tenantMenu.setMenuId(menu);
|
|
256
|
+ tenantMenu.setTenantId(updateTenantId);
|
|
257
|
+ tenantMenuMapper.insert(tenantMenu);
|
|
258
|
+ });
|
|
259
|
+ });
|
236
|
260
|
}
|
|
261
|
+ cacheUtils.invalidateCacheName(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY);
|
|
262
|
+ return role.getDTO(RoleDTO.class);
|
|
263
|
+ }
|
237
|
264
|
|
238
|
|
- @Override
|
239
|
|
- public List<RoleDTO> findRoleInfo(
|
240
|
|
- boolean isTenantAdmin, String tenantId, String userId, RoleDTO roleDTO) {
|
241
|
|
- if (StringUtils.isEmpty(roleDTO.getTenantId())) {
|
242
|
|
- roleDTO.setTenantId(tenantId);
|
243
|
|
- }
|
244
|
|
- if (isTenantAdmin) {
|
245
|
|
- // 租户管理员既要查询自己拥有的角色,也要查询自己创建的角色
|
246
|
|
- List<String> roleIds =
|
247
|
|
- userRoleMapper
|
248
|
|
- .selectList(new QueryWrapper<SysUserRoleEntity>().lambda().eq(SysUserRoleEntity::getUserId, userId))
|
249
|
|
- .stream()
|
250
|
|
- .map(SysUserRoleEntity::getRoleId)
|
251
|
|
- .collect(Collectors.toList());
|
252
|
|
- roleDTO.setRoleIds(roleIds.toArray(new String[roleIds.size()]));
|
253
|
|
- }
|
254
|
|
- return baseMapper.findRoleInfo(roleDTO);
|
|
265
|
+ @Override
|
|
266
|
+ public List<RoleDTO> findRoleInfo(
|
|
267
|
+ boolean isTenantAdmin, String tenantId, String userId, RoleDTO roleDTO) {
|
|
268
|
+ if (StringUtils.isEmpty(roleDTO.getTenantId())) {
|
|
269
|
+ roleDTO.setTenantId(tenantId);
|
|
270
|
+ }
|
|
271
|
+ if (isTenantAdmin) {
|
|
272
|
+ // 租户管理员既要查询自己拥有的角色,也要查询自己创建的角色
|
|
273
|
+ List<String> roleIds =
|
|
274
|
+ userRoleMapper
|
|
275
|
+ .selectList(
|
|
276
|
+ new QueryWrapper<SysUserRoleEntity>()
|
|
277
|
+ .lambda()
|
|
278
|
+ .eq(SysUserRoleEntity::getUserId, userId))
|
|
279
|
+ .stream()
|
|
280
|
+ .map(SysUserRoleEntity::getRoleId)
|
|
281
|
+ .collect(Collectors.toList());
|
|
282
|
+ roleDTO.setRoleIds(roleIds.toArray(new String[roleIds.size()]));
|
255
|
283
|
}
|
|
284
|
+ return baseMapper.findRoleInfo(roleDTO);
|
|
285
|
+ }
|
256
|
286
|
} |
...
|
...
|
|