package com.ard.framework.aspectj; import com.ard.common.annotation.DataScopePlus; import com.ard.common.constant.UserConstants; import com.ard.common.core.domain.entity.SysRole; import com.ard.common.core.domain.entity.SysUser; import com.ard.common.core.domain.model.LoginUser; import com.ard.common.core.text.Convert; import com.ard.common.utils.SecurityUtils; import com.ard.common.utils.StringUtils; import com.ard.framework.security.context.PermissionContextHolder; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Aspect @Component public class DataScopePlusAspect { // /** // * 全部数据权限 // */ // 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"; // // // @Pointcut("@annotation(com.ard.common.annotation.DataScopePlus)") // public void dataScopePointcut() { // } // // @Before("@annotation(controllerDataScopePlus)") // public void doBefore(JoinPoint joinPoint, DataScopePlus controllerDataScopePlus) { // handleDataScope(joinPoint, controllerDataScopePlus); // } // // protected void handleDataScope(final JoinPoint joinPoint, DataScopePlus controllerDataScope) { // // 获取当前用户 // LoginUser loginUser = SecurityUtils.getLoginUser(); // if (StringUtils.isNotNull(loginUser)) { // SysUser currentUser = loginUser.getUser(); // if (currentUser != null && !currentUser.isAdmin()) { // String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), // PermissionContextHolder.getContext()); // dataScopeFilter(joinPoint, currentUser, permission); // } // } // } // // private void dataScopeFilter(JoinPoint joinPoint, SysUser user, String permission) { // StringBuilder sqlString = new StringBuilder(); // List conditions = new ArrayList<>(); // List scopeCustomIds = new ArrayList<>(); // // // 获取用户角色并遍历进行权限检查 // user.getRoles().forEach(role -> { // if (DATA_SCOPE_CUSTOM.equals(role.getDataScope()) && StringUtils.equals(role.getStatus(), // UserConstants.ROLE_NORMAL)) { // if (StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) { // scopeCustomIds.add(Convert.toStr(role.getRoleId())); // } // } // }); // // for (SysRole role : user.getRoles()) { // String dataScope = role.getDataScope(); // if (conditions.contains(dataScope) || StringUtils.equals(role.getStatus(), UserConstants.ROLE_DISABLE)) { // continue; // } // // if (!StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) { // continue; // } // // if (DATA_SCOPE_ALL.equals(dataScope)) { // sqlString = new StringBuilder(); // conditions.add(dataScope); // break; // } else if (DATA_SCOPE_CUSTOM.equals(dataScope)) { // // 自定义数据权限 // if (scopeCustomIds.size() > 1) { // sqlString.append(StringUtils.format(" OR dept_id IN (SELECT dept_id FROM sys_role_dept WHERE " + // "role_id IN ({}) )", String.join(",", scopeCustomIds))); // } else { // sqlString.append(StringUtils.format(" OR dept_id IN (SELECT dept_id FROM sys_role_dept WHERE " + // "role_id = {} )", role.getRoleId())); // } // } else if (DATA_SCOPE_DEPT.equals(dataScope)) { // // 部门数据权限 // sqlString.append(StringUtils.format(" OR dept_id = {}", 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))", user.getDeptId(), user.getDeptId())); // } else if (DATA_SCOPE_SELF.equals(dataScope)) { // // 仅本人数据权限 // sqlString.append(StringUtils.format(" OR user_id = {}", user.getUserId())); // } // conditions.add(dataScope); // } // QueryWrapper queryWrapper = getQueryWrapper(joinPoint); // if (StringUtils.isNotBlank(sqlString.toString())) { // queryWrapper.apply(sqlString.substring(4)); // } // } // // private QueryWrapper getQueryWrapper(JoinPoint joinPoint) { // Object[] args = joinPoint.getArgs(); // if (args != null && args.length > 0 && args[0] instanceof QueryWrapper) { // return (QueryWrapper) args[0]; // } // return null; // } }