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);