Browse Source

update common-datascope module logic

guoenzhou 1 year ago
parent
commit
3baa4832ca

+ 1 - 1
base-common/ruoyi-common-datascope/pom.xml

@@ -19,7 +19,7 @@
        <!-- RuoYi Common Security-->
         <dependency>
             <groupId>com.usky</groupId>
-            <artifactId>ruoyi-common-security</artifactId>
+            <artifactId>usky-common-security</artifactId>
         </dependency>
     </dependencies>
 </project>

+ 152 - 150
base-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java

@@ -1,150 +1,152 @@
-//package com.ruoyi.common.datascope.aspect;
-//
-//import org.aspectj.lang.JoinPoint;
-//import org.aspectj.lang.annotation.Aspect;
-//import org.aspectj.lang.annotation.Before;
-//import org.springframework.stereotype.Component;
-//import com.ruoyi.common.core.utils.StringUtils;
-//import com.ruoyi.common.core.web.domain.BaseEntity;
-//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.api.model.LoginUser;
-//
-///**
-// * 数据过滤处理
-// *
-// * @author ruoyi
-// */
-//@Aspect
-//@Component
-//public class DataScopeAspect
-//{
-//    /**
-//     * 全部数据权限
-//     */
-//    public static final String DATA_SCOPE_ALL = "1";
-//
-//    /**
-//     * 自定数据权限
-//     */
-//    public static final String DATA_SCOPE_CUSTOM = "2";
-//
-//    /**
-//     * 部门数据权限
-//     */
-//    public static final String DATA_SCOPE_DEPT = "3";
-//
-//    /**
-//     * 部门及以下数据权限
-//     */
-//    public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
-//
-//    /**
-//     * 仅本人数据权限
-//     */
-//    public static final String DATA_SCOPE_SELF = "5";
-//
-//    /**
-//     * 数据权限过滤关键字
-//     */
-//    public static final String DATA_SCOPE = "dataScope";
-//
-//    @Before("@annotation(controllerDataScope)")
-//    public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable
-//    {
-//        clearDataScope(point);
-//        handleDataScope(point, controllerDataScope);
-//    }
-//
-//    protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope)
-//    {
-//        // 获取当前的用户
-//        LoginUser loginUser = SecurityUtils.getLoginUser();
-//        if (StringUtils.isNotNull(loginUser))
-//        {
-//            SysUser currentUser = loginUser.getSysUser();
-//            // 如果是超级管理员,则不过滤数据
-//            if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin())
-//            {
-//                dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
-//                        controllerDataScope.userAlias());
-//            }
-//        }
-//    }
-//
-//    /**
-//     * 数据范围过滤
-//     *
-//     * @param joinPoint 切点
-//     * @param user 用户
-//     * @param deptAlias 部门别名
-//     * @param userAlias 用户别名
-//     */
-//    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias)
-//    {
-//        StringBuilder sqlString = new StringBuilder();
-//
-//        for (SysRole role : user.getRoles())
-//        {
-//            String dataScope = role.getDataScope();
-//            if (DATA_SCOPE_ALL.equals(dataScope))
-//            {
-//                sqlString = new StringBuilder();
-//                break;
-//            }
-//            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 = {} ) ", deptAlias,
-//                        role.getRoleId()));
-//            }
-//            else if (DATA_SCOPE_DEPT.equals(dataScope))
-//            {
-//                sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
-//            }
-//            else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
-//            {
-//                sqlString.append(StringUtils.format(
-//                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
-//                        deptAlias, user.getDeptId(), user.getDeptId()));
-//            }
-//            else if (DATA_SCOPE_SELF.equals(dataScope))
-//            {
-//                if (StringUtils.isNotBlank(userAlias))
-//                {
-//                    sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
-//                }
-//                else
-//                {
-//                    // 数据权限为仅本人且没有userAlias别名不查询任何数据
-//                    sqlString.append(" OR 1=0 ");
-//                }
-//            }
-//        }
-//
-//        if (StringUtils.isNotBlank(sqlString.toString()))
-//        {
-//            Object params = joinPoint.getArgs()[0];
-//            if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
-//            {
-//                BaseEntity baseEntity = (BaseEntity) params;
-//                baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
-//            }
-//        }
-//    }
-//
-//    /**
-//     * 拼接权限sql前先清空params.dataScope参数防止注入
-//     */
-//    private void clearDataScope(final JoinPoint joinPoint)
-//    {
-//        Object params = joinPoint.getArgs()[0];
-//        if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
-//        {
-//            BaseEntity baseEntity = (BaseEntity) params;
-//            baseEntity.getParams().put(DATA_SCOPE, "");
-//        }
-//    }
-//}
+package com.ruoyi.common.datascope.aspect;
+
+import com.usky.system.domain.SysUserVO;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+import com.usky.common.core.utils.StringUtils;
+import com.usky.common.core.bean.BaseEntity;
+import com.ruoyi.common.datascope.annotation.DataScope;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.system.domain.SysRoleVO;
+import com.usky.system.model.LoginUser;
+
+import java.util.Map;
+
+/**
+ * 数据过滤处理
+ *
+ * @author ruoyi
+ */
+@Aspect
+@Component
+public class DataScopeAspect
+{
+    /**
+     * 全部数据权限
+     */
+    public static final String DATA_SCOPE_ALL = "1";
+
+    /**
+     * 自定数据权限
+     */
+    public static final String DATA_SCOPE_CUSTOM = "2";
+
+    /**
+     * 部门数据权限
+     */
+    public static final String DATA_SCOPE_DEPT = "3";
+
+    /**
+     * 部门及以下数据权限
+     */
+    public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
+
+    /**
+     * 仅本人数据权限
+     */
+    public static final String DATA_SCOPE_SELF = "5";
+
+    /**
+     * 数据权限过滤关键字
+     */
+    public static final String DATA_SCOPE = "dataScope";
+
+    @Before("@annotation(controllerDataScope)")
+    public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable
+    {
+        clearDataScope(point);
+        handleDataScope(point, controllerDataScope);
+    }
+
+    protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope)
+    {
+        // 获取当前的用户
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (StringUtils.isNotNull(loginUser))
+        {
+            SysUserVO currentUser = loginUser.getSysUser();
+            // 如果是超级管理员,则不过滤数据
+            if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin())
+            {
+                dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
+                        controllerDataScope.userAlias());
+            }
+        }
+    }
+
+    /**
+     * 数据范围过滤
+     *
+     * @param joinPoint 切点
+     * @param user 用户
+     * @param deptAlias 部门别名
+     * @param userAlias 用户别名
+     */
+    public static void dataScopeFilter(JoinPoint joinPoint, SysUserVO user, String deptAlias, String userAlias)
+    {
+        StringBuilder sqlString = new StringBuilder();
+
+        for (SysRoleVO role : user.getRoles())
+        {
+            String dataScope = role.getDataScope();
+            if (DATA_SCOPE_ALL.equals(dataScope))
+            {
+                sqlString = new StringBuilder();
+                break;
+            }
+            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 = {} ) ", deptAlias,
+                        role.getRoleId()));
+            }
+            else if (DATA_SCOPE_DEPT.equals(dataScope))
+            {
+                sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
+            }
+            else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
+            {
+                sqlString.append(StringUtils.format(
+                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
+                        deptAlias, user.getDeptId(), user.getDeptId()));
+            }
+            else if (DATA_SCOPE_SELF.equals(dataScope))
+            {
+                if (StringUtils.isNotBlank(userAlias))
+                {
+                    sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
+                }
+                else
+                {
+                    // 数据权限为仅本人且没有userAlias别名不查询任何数据
+                    sqlString.append(" OR 1=0 ");
+                }
+            }
+        }
+
+        if (StringUtils.isNotBlank(sqlString.toString()))
+        {
+            Object params = joinPoint.getArgs()[0];
+            if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
+            {
+                BaseEntity baseEntity = (BaseEntity) params;
+                baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
+            }
+        }
+    }
+
+    /**
+     * 拼接权限sql前先清空params.dataScope参数防止注入
+     */
+    private void clearDataScope(final JoinPoint joinPoint)
+    {
+        Object params = joinPoint.getArgs()[0];
+        if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
+        {
+            BaseEntity baseEntity = (BaseEntity) params;
+            baseEntity.getParams().put(DATA_SCOPE, "");
+        }
+    }
+}

+ 2 - 0
base-modules/service-system/service-system-biz/pom.xml

@@ -56,6 +56,7 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration> <fork>false</fork> </configuration>
                 <version>2.2.6.RELEASE</version>
                 <executions>
                     <execution>
@@ -64,6 +65,7 @@
                         </goals>
                     </execution>
                 </executions>
+
             </plugin>
             <plugin>
                 <groupId>com.github.shalousun</groupId>

+ 6 - 6
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/TokenController.java

@@ -60,13 +60,15 @@ public class TokenController {
 //        String phone = null;
         // 用户登录
         SysUser userInfo = sysLoginService.appLogin(form.getUsername(), form.getPassword(), form.getTenantId(), form.getPhone(), form.getVerify());
-        LoginUser SysUser = new LoginUser();
+        LoginUser sysUser = new LoginUser();
         SysUserVO sysUserVO = BeanMapperUtils.map(userInfo, SysUserVO.class);
-        SysUser.setSysUser(sysUserVO);
+        sysUser.setSysUser(sysUserVO);
+        Set<String> rolePermission = permissionService.getRolePermission(userInfo.getUserId());
+        sysUser.setRoles(rolePermission);
         SysPerson sysPerson = sysPersonService.getsysPerson(userInfo.getUserId());
-        SysUser.setSysPerson(sysPerson);
+        sysUser.setSysPerson(sysPerson);
         // 获取登录token
-        return ApiResult.success(tokenService.createToken(SysUser));
+        return ApiResult.success(tokenService.createToken(sysUser));
     }
 
 
@@ -79,8 +81,6 @@ public class TokenController {
 
     //PC通过二维码编号获取用户登录授权
 
-    //
-
 
 
 //    @PostMapping("login1")

+ 2 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysDeptServiceImpl.java

@@ -1,6 +1,7 @@
 package com.usky.system.service.impl;
 
 
+import com.ruoyi.common.datascope.annotation.DataScope;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.common.core.exception.BusinessException;
@@ -44,6 +45,7 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
      * @return 部门信息集合
      */
     @Override
+    @DataScope(deptAlias = "d")
     public List<SysDept> selectDeptList(SysDept dept)
     {
         dept.setTenantId(SecurityUtils.getTenantId());

+ 16 - 9
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserServiceImpl.java

@@ -16,6 +16,7 @@ import com.usky.system.service.ISysConfigService;
 import com.usky.system.service.ISysUserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -24,6 +25,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 用户 业务层处理
@@ -496,15 +498,20 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
 
     @Override
     public SysUser getAppUserInfo(String username, Integer tenantId, String phone) {
-        SysUser sysUser = new SysUser();
-        if (!StringUtils.isBlank(username)) {
-            sysUser = userMapper.selectUserData(username, tenantId);
-        } else if (!StringUtils.isBlank(phone)) {
-            sysUser = userMapper.selectUserDataOne(tenantId,phone);
-        }
-
-
-        return sysUser;
+       SysUser sysUser = new SysUser();
+       if (!StringUtils.isBlank(username)) {
+           sysUser = userMapper.selectUserData(username, tenantId);
+       } else if (!StringUtils.isBlank(phone)) {
+           sysUser = userMapper.selectUserDataOne(tenantId,phone);
+       }
+       List<SysRole> sysRoles = roleMapper.selectRolePermissionByUserId(sysUser.getUserId());
+       List<SysRoleVO> collect = sysRoles.stream().map(sysRole -> {
+           SysRoleVO sysRoleVO = new SysRoleVO();
+           BeanUtils.copyProperties(sysRole, sysRoleVO);
+           return sysRoleVO;
+       }).collect(Collectors.toList());
+       sysUser.setRoles(collect);
+       return sysUser;
     }
 
 

+ 6 - 0
usky-common/common-cloud-starter/pom.xml

@@ -78,6 +78,12 @@
             <artifactId>usky-common-log</artifactId>
         </dependency>
 
+        <!-- RuoYi Common DataScope -->
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>ruoyi-common-datascope</artifactId>
+        </dependency>
+
 <!--       <dependency>-->
 <!--           <groupId>com.usky</groupId>-->
 <!--           <artifactId>ruoyi-common-swagger</artifactId>-->