From 90cbabb7a7a4b0dc5cf76f926b6cd63b989099f4 Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: Thu, 04 Dec 2025 16:42:55 +0800
Subject: [PATCH] 优化代码
---
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 133 +++++++++++++++++++++++++++++++++++++++++---
1 files changed, 124 insertions(+), 9 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index d320536..cff399e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -9,13 +9,16 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.common.core.constant.UserConstants;
-import com.ruoyi.common.core.exception.CustomException;
+import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.datascope.annotation.DataScope;
+import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.domain.SysRoleDept;
import com.ruoyi.system.domain.SysRoleMenu;
+import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.SysRoleDeptMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysRoleMenuMapper;
@@ -56,6 +59,31 @@
}
/**
+ * 根据用户ID查询角色
+ *
+ * @param userId 用户ID
+ * @return 角色列表
+ */
+ @Override
+ public List<SysRole> selectRolesByUserId(Long userId)
+ {
+ List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId);
+ List<SysRole> roles = selectRoleAll();
+ for (SysRole role : roles)
+ {
+ for (SysRole userRole : userRoles)
+ {
+ if (role.getRoleId().longValue() == userRole.getRoleId().longValue())
+ {
+ role.setFlag(true);
+ break;
+ }
+ }
+ }
+ return roles;
+ }
+
+ /**
* 根据用户ID查询权限
*
* @param userId 用户ID
@@ -81,6 +109,7 @@
*
* @return 角色列表
*/
+ @Override
public List<SysRole> selectRoleAll()
{
return SpringUtils.getAopProxy(this).selectRoleList(new SysRole());
@@ -92,7 +121,8 @@
* @param userId 用户ID
* @return 选中角色ID列表
*/
- public List<Integer> selectRoleListByUserId(Long userId)
+ @Override
+ public List<Long> selectRoleListByUserId(Long userId)
{
return roleMapper.selectRoleListByUserId(userId);
}
@@ -103,6 +133,7 @@
* @param roleId 角色ID
* @return 角色对象信息
*/
+ @Override
public SysRole selectRoleById(Long roleId)
{
return roleMapper.selectRoleById(roleId);
@@ -115,7 +146,7 @@
* @return 结果
*/
@Override
- public String checkRoleNameUnique(SysRole role)
+ public boolean checkRoleNameUnique(SysRole role)
{
Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName());
@@ -133,7 +164,7 @@
* @return 结果
*/
@Override
- public String checkRoleKeyUnique(SysRole role)
+ public boolean checkRoleKeyUnique(SysRole role)
{
Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey());
@@ -149,11 +180,35 @@
*
* @param role 角色信息
*/
+ @Override
public void checkRoleAllowed(SysRole role)
{
if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin())
{
- throw new CustomException("不允许操作超级管理员角色");
+ throw new ServiceException("不允许操作超级管理员角色");
+ }
+ }
+
+ /**
+ * 校验角色是否有数据权限
+ *
+ * @param roleIds 角色id
+ */
+ @Override
+ public void checkRoleDataScope(Long... roleIds)
+ {
+ if (!SysUser.isAdmin(SecurityUtils.getUserId()))
+ {
+ for (Long roleId : roleIds)
+ {
+ SysRole role = new SysRole();
+ role.setRoleId(roleId);
+ List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role);
+ if (StringUtils.isEmpty(roles))
+ {
+ throw new ServiceException("没有权限访问角色数据!");
+ }
+ }
}
}
@@ -176,7 +231,7 @@
* @return 结果
*/
@Override
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public int insertRole(SysRole role)
{
// 新增角色信息
@@ -191,7 +246,7 @@
* @return 结果
*/
@Override
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public int updateRole(SysRole role)
{
// 修改角色信息
@@ -207,6 +262,7 @@
* @param role 角色信息
* @return 结果
*/
+ @Override
public int updateRoleStatus(SysRole role)
{
return roleMapper.updateRole(role);
@@ -219,7 +275,7 @@
* @return 结果
*/
@Override
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public int authDataScope(SysRole role)
{
// 修改角色信息
@@ -285,8 +341,13 @@
* @return 结果
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public int deleteRoleById(Long roleId)
{
+ // 删除角色与菜单关联
+ roleMenuMapper.deleteRoleMenuByRoleId(roleId);
+ // 删除角色与部门关联
+ roleDeptMapper.deleteRoleDeptByRoleId(roleId);
return roleMapper.deleteRoleById(roleId);
}
@@ -296,17 +357,71 @@
* @param roleIds 需要删除的角色ID
* @return 结果
*/
+ @Override
+ @Transactional(rollbackFor = Exception.class)
public int deleteRoleByIds(Long[] roleIds)
{
for (Long roleId : roleIds)
{
checkRoleAllowed(new SysRole(roleId));
+ checkRoleDataScope(roleId);
SysRole role = selectRoleById(roleId);
if (countUserRoleByRoleId(roleId) > 0)
{
- throw new CustomException(String.format("%1$s已分配,不能删除", role.getRoleName()));
+ throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName()));
}
}
+ // 删除角色与菜单关联
+ roleMenuMapper.deleteRoleMenu(roleIds);
+ // 删除角色与部门关联
+ roleDeptMapper.deleteRoleDept(roleIds);
return roleMapper.deleteRoleByIds(roleIds);
}
+
+ /**
+ * 取消授权用户角色
+ *
+ * @param userRole 用户和角色关联信息
+ * @return 结果
+ */
+ @Override
+ public int deleteAuthUser(SysUserRole userRole)
+ {
+ return userRoleMapper.deleteUserRoleInfo(userRole);
+ }
+
+ /**
+ * 批量取消授权用户角色
+ *
+ * @param roleId 角色ID
+ * @param userIds 需要取消授权的用户数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteAuthUsers(Long roleId, Long[] userIds)
+ {
+ return userRoleMapper.deleteUserRoleInfos(roleId, userIds);
+ }
+
+ /**
+ * 批量选择授权用户角色
+ *
+ * @param roleId 角色ID
+ * @param userIds 需要授权的用户数据ID
+ * @return 结果
+ */
+ @Override
+ public int insertAuthUsers(Long roleId, Long[] userIds)
+ {
+ // 新增用户与角色管理
+ List<SysUserRole> list = new ArrayList<SysUserRole>();
+ for (Long userId : userIds)
+ {
+ SysUserRole ur = new SysUserRole();
+ ur.setUserId(userId);
+ ur.setRoleId(roleId);
+ list.add(ur);
+ }
+ return userRoleMapper.batchUserRole(list);
+ }
}
--
Gitblit v1.9.3