diff --git a/ruoyi-admin/src/main/resources/templates/system/role/dataScope.html b/ruoyi-admin/src/main/resources/templates/system/role/dataScope.html index 4e7f7322..7cb3d8cb 100644 --- a/ruoyi-admin/src/main/resources/templates/system/role/dataScope.html +++ b/ruoyi-admin/src/main/resources/templates/system/role/dataScope.html @@ -28,6 +28,7 @@ + 特殊情况下,设置为“自定数据权限” diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java index 007c3db0..fe5a01f5 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java @@ -17,7 +17,12 @@ import java.lang.annotation.Target; public @interface DataScope { /** - * 表的别名 + * 部门表的别名 */ - public String tableAlias() default ""; + public String deptAlias() default ""; + + /** + * 用户表的别名 + */ + public String userAlias() default ""; } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java index 2dd1607e..8f8872d5 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java @@ -44,6 +44,11 @@ public class DataScopeAspect */ public static final String DATA_SCOPE_DEPT_AND_CHILD = "4"; + /** + * 仅本人数据权限 + */ + public static final String DATA_SCOPE_SELF = "5"; + /** * 数据权限过滤关键字 */ @@ -76,7 +81,8 @@ public class DataScopeAspect // 如果是超级管理员,则不过滤数据 if (!currentUser.isAdmin()) { - dataScopeFilter(joinPoint, currentUser, controllerDataScope.tableAlias()); + dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), + controllerDataScope.userAlias()); } } } @@ -88,7 +94,7 @@ public class DataScopeAspect * @param user 用户 * @param alias 别名 */ - public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String alias) + public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias) { StringBuilder sqlString = new StringBuilder(); @@ -103,19 +109,30 @@ public class DataScopeAspect else if (DATA_SCOPE_CUSTOM.equals(dataScope)) { sqlString.append(StringUtils.format( - " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", alias, + " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId())); } else if (DATA_SCOPE_DEPT.equals(dataScope)) { - sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", alias, user.getDeptId())); + sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId())); } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) { String deptChild = user.getDept().getParentId() + "," + user.getDeptId(); sqlString.append(StringUtils.format( " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or ancestors LIKE '%{}%' )", - alias, user.getDeptId(), deptChild)); + deptAlias, user.getDeptId(), deptChild)); + } + else if (DATA_SCOPE_SELF.equals(dataScope)) + { + if (StringUtils.isNotBlank(userAlias)) + { + sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId())); + } + else + { + sqlString.append(StringUtils.format(" OR {}.dept_id IS NULL ", deptAlias)); + } } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 11336457..422b3364 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -33,7 +33,7 @@ public class SysDeptServiceImpl implements ISysDeptService * @return 部门信息集合 */ @Override - @DataScope(tableAlias = "d") + @DataScope(deptAlias = "d") public List selectDeptList(SysDept dept) { return deptMapper.selectDeptList(dept); @@ -46,7 +46,7 @@ public class SysDeptServiceImpl implements ISysDeptService * @return 所有部门信息 */ @Override - @DataScope(tableAlias = "d") + @DataScope(deptAlias = "d") public List selectDeptTree(SysDept dept) { List deptList = deptMapper.selectDeptList(dept); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index d66afdd5..caa9f570 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -51,7 +51,7 @@ public class SysRoleServiceImpl implements ISysRoleService * @return 角色数据集合信息 */ @Override - @DataScope(tableAlias = "u") + @DataScope(deptAlias = "d") public List selectRoleList(SysRole role) { return roleMapper.selectRoleList(role); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 36299f99..dd62ddea 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -61,7 +61,7 @@ public class SysUserServiceImpl implements ISysUserService * @return 用户信息集合信息 */ @Override - @DataScope(tableAlias = "u") + @DataScope(deptAlias = "d", userAlias = "u") public List selectUserList(SysUser user) { return userMapper.selectUserList(user); @@ -73,7 +73,7 @@ public class SysUserServiceImpl implements ISysUserService * @param user 用户信息 * @return 用户信息集合信息 */ - @DataScope(tableAlias = "u") + @DataScope(deptAlias = "d", userAlias = "u") public List selectAllocatedList(SysUser user) { return userMapper.selectAllocatedList(user); @@ -85,7 +85,7 @@ public class SysUserServiceImpl implements ISysUserService * @param user 用户信息 * @return 用户信息集合信息 */ - @DataScope(tableAlias = "u") + @DataScope(deptAlias = "d", userAlias = "u") public List selectUnallocatedList(SysUser user) { return userMapper.selectUnallocatedList(user);