角色删除(若角色仍绑定用户则拒绝删除并返回错误信息);适配了组织机构树返回时orgscope为空时,默认全量可见。
This commit is contained in:
parent
a6791810c1
commit
ca1a0254b3
@ -289,8 +289,8 @@ public class SysRoleController {
|
|||||||
/***********************************
|
/***********************************
|
||||||
* 用途说明:根据id删除角色
|
* 用途说明:根据id删除角色
|
||||||
* 参数说明
|
* 参数说明
|
||||||
*id 角色id
|
* id 角色id(支持逗号分隔批量)
|
||||||
* 返回值说明: 是否删除成功
|
* 返回值说明: 成功返回 success;若角色仍绑定用户则拒绝删除并返回错误信息(Fail-Fast:批量中只要有一个绑定则全部不删除)
|
||||||
***********************************/
|
***********************************/
|
||||||
@PostMapping("/deleteById")
|
@PostMapping("/deleteById")
|
||||||
@Operation(summary = "根据id删除角色")
|
@Operation(summary = "根据id删除角色")
|
||||||
|
|||||||
@ -25,6 +25,8 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
|
|||||||
************************************/
|
************************************/
|
||||||
List<Map<String, String>> isRoleUsersByroleid(String roleid);
|
List<Map<String, String>> isRoleUsersByroleid(String roleid);
|
||||||
|
|
||||||
|
List<Map<String, Object>> countRoleUsersByRoleIds(@Param("roleIds") List<String> roleIds);
|
||||||
|
|
||||||
/***********************************
|
/***********************************
|
||||||
* 用途说明:根据角色id查询是否存在权限
|
* 用途说明:根据角色id查询是否存在权限
|
||||||
* 参数说明
|
* 参数说明
|
||||||
|
|||||||
@ -86,7 +86,9 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
|
|||||||
ids.addAll(stringList);
|
ids.addAll(stringList);
|
||||||
ids.addAll(set);
|
ids.addAll(set);
|
||||||
}
|
}
|
||||||
queryWrapper.in("id", ids);
|
if (ObjectUtil.isNotEmpty(ids)) {
|
||||||
|
queryWrapper.in("id", ids);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
listMap = this.listMaps(queryWrapper.orderByAsc("orgcode"));
|
listMap = this.listMaps(queryWrapper.orderByAsc("orgcode"));
|
||||||
for (int i = 0; i < listMap.size(); i++) {
|
for (int i = 0; i < listMap.size(); i++) {
|
||||||
|
|||||||
@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -91,8 +92,59 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||||||
***********************************/
|
***********************************/
|
||||||
@Override
|
@Override
|
||||||
public void deleteById(String id) {
|
public void deleteById(String id) {
|
||||||
|
if (StringUtils.isBlank(id)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
String[] ids = id.split(",");
|
String[] ids = id.split(",");
|
||||||
|
List<String> roleIds = new ArrayList<>();
|
||||||
for (String roleId : ids) {
|
for (String roleId : ids) {
|
||||||
|
if (StringUtils.isBlank(roleId)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String trimmed = roleId.trim();
|
||||||
|
if (StringUtils.isBlank(trimmed)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!roleIds.contains(trimmed)) {
|
||||||
|
roleIds.add(trimmed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (roleIds.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<Map<String, Object>> blocks =
|
||||||
|
roleMapper.countRoleUsersByRoleIds(roleIds);
|
||||||
|
if (blocks != null && !blocks.isEmpty()) {
|
||||||
|
StringBuilder message = new StringBuilder();
|
||||||
|
message.append("以下角色仍绑定用户,无法物理删除,请先解绑或转移用户:");
|
||||||
|
for (int i = 0; i < blocks.size(); i++) {
|
||||||
|
Map<String, Object> block = blocks.get(i);
|
||||||
|
Object roleIdObj = block.get("roleid");
|
||||||
|
if (roleIdObj == null) {
|
||||||
|
roleIdObj = block.get("roleId");
|
||||||
|
}
|
||||||
|
Object roleNameObj = block.get("rolename");
|
||||||
|
if (roleNameObj == null) {
|
||||||
|
roleNameObj = block.get("roleName");
|
||||||
|
}
|
||||||
|
Object userCountObj = block.get("userCount");
|
||||||
|
if (userCountObj == null) {
|
||||||
|
userCountObj = block.get("usercount");
|
||||||
|
}
|
||||||
|
String roleId = roleIdObj == null ? "" : roleIdObj.toString();
|
||||||
|
String roleName =
|
||||||
|
roleNameObj == null ? "" : roleNameObj.toString();
|
||||||
|
String userCount =
|
||||||
|
userCountObj == null ? "0" : userCountObj.toString();
|
||||||
|
if (i > 0) {
|
||||||
|
message.append(";");
|
||||||
|
}
|
||||||
|
message.append(roleName).append("(角色ID=").append(roleId)
|
||||||
|
.append(") ").append(userCount).append("人");
|
||||||
|
}
|
||||||
|
throw new RuntimeException(message.toString());
|
||||||
|
}
|
||||||
|
for (String roleId : roleIds) {
|
||||||
//根据id删除 角色
|
//根据id删除 角色
|
||||||
boolean isOk = this.removeById(roleId);
|
boolean isOk = this.removeById(roleId);
|
||||||
if (!isOk) {
|
if (!isOk) {
|
||||||
|
|||||||
@ -33,6 +33,18 @@
|
|||||||
select id,roleid,userid from sys_role_users where roleid=#{roleid}
|
select id,roleid,userid from sys_role_users where roleid=#{roleid}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="countRoleUsersByRoleIds" resultType="java.util.Map">
|
||||||
|
select r.id roleid, r.rolename rolename, count(ru.userid) userCount
|
||||||
|
from sys_role r
|
||||||
|
left join sys_role_users ru on ru.roleid = r.id
|
||||||
|
where r.id in
|
||||||
|
<foreach collection="roleIds" item="roleId" open="(" close=")" separator=",">
|
||||||
|
#{roleId}
|
||||||
|
</foreach>
|
||||||
|
group by r.id, r.rolename
|
||||||
|
having count(ru.userid) > 0
|
||||||
|
</select>
|
||||||
|
|
||||||
<!--根据角色id查询该角色下的所有权限-->
|
<!--根据角色id查询该角色下的所有权限-->
|
||||||
<select id="isRoleMenuByRoleId" resultType="java.util.Map">
|
<select id="isRoleMenuByRoleId" resultType="java.util.Map">
|
||||||
select id,roleid,menuid from sys_role_menu where roleid=#{roleid}
|
select id,roleid,menuid from sys_role_menu where roleid=#{roleid}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user