Compare commits
2 Commits
e0d3fc23ed
...
8dc4c731d0
| Author | SHA1 | Date |
|---|---|---|
|
|
8dc4c731d0 | |
|
|
eb17cb7b47 |
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.electromagnetic.industry.software.manage.aop;
|
||||||
|
|
||||||
|
import com.electromagnetic.industry.software.common.annotations.RequiredPermission;
|
||||||
|
import com.electromagnetic.industry.software.common.enums.FilePermission;
|
||||||
|
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
|
||||||
|
import com.electromagnetic.industry.software.manage.service.PermissionService;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Before;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
public class PermissionAspect {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
PermissionService permissionService;
|
||||||
|
|
||||||
|
@Before("@annotation(requiredPermission) && args(id)")
|
||||||
|
public void requirePermission(RequiredPermission requiredPermission, String id) {
|
||||||
|
|
||||||
|
FilePermission filePermission = requiredPermission.value();
|
||||||
|
String userId = UserThreadLocal.getUserId();
|
||||||
|
Map<String,Boolean> permissions = permissionService.getUserPermission(userId,id);
|
||||||
|
if (!permissions.get(filePermission.getCode()).equals(Boolean.TRUE)) {
|
||||||
|
throw new SecurityException("用户无权限执行此操作");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -37,4 +37,10 @@ public interface PermissionService {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Map<String, Boolean> transToMap(List<String> permissionCodes);
|
Map<String, Boolean> transToMap(List<String> permissionCodes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查文件id列表是否可具有导出权限
|
||||||
|
* @param ids
|
||||||
|
*/
|
||||||
|
String[] filterExportIds(String[] ids);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import com.electromagnetic.industry.software.manage.mapper.UserRoleMapper;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.models.RolePermission;
|
import com.electromagnetic.industry.software.manage.pojo.models.RolePermission;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.models.UserRole;
|
import com.electromagnetic.industry.software.manage.pojo.models.UserRole;
|
||||||
import com.electromagnetic.industry.software.manage.service.PermissionService;
|
import com.electromagnetic.industry.software.manage.service.PermissionService;
|
||||||
|
import com.electromagnetic.industry.software.manage.service.RolePermissionService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
|
@ -37,7 +38,7 @@ public class PermissionServiceImpl implements PermissionService {
|
||||||
|
|
||||||
List<String> roleIds = getRoles(userId);
|
List<String> roleIds = getRoles(userId);
|
||||||
// 只有当 roleIds 不为空且不为 null 时,才添加 in 条件
|
// 只有当 roleIds 不为空且不为 null 时,才添加 in 条件
|
||||||
if (CollUtil.isEmpty(roleIds)) {
|
if (roleIds.isEmpty()) {
|
||||||
return new HashMap<>();
|
return new HashMap<>();
|
||||||
}
|
}
|
||||||
LambdaQueryWrapper<RolePermission> queryWrapper1 = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<RolePermission> queryWrapper1 = new LambdaQueryWrapper<>();
|
||||||
|
|
@ -58,6 +59,10 @@ public class PermissionServiceImpl implements PermissionService {
|
||||||
String userId = UserThreadLocal.getUserId();
|
String userId = UserThreadLocal.getUserId();
|
||||||
List<String> roleIds = getRoles(userId);
|
List<String> roleIds = getRoles(userId);
|
||||||
|
|
||||||
|
if (roleIds ==null || roleIds.isEmpty()) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
LambdaQueryWrapper<RolePermission> queryWrapper1 = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<RolePermission> queryWrapper1 = new LambdaQueryWrapper<>();
|
||||||
queryWrapper1.select(RolePermission::getFileId)
|
queryWrapper1.select(RolePermission::getFileId)
|
||||||
.in(RolePermission::getRoleId, roleIds)
|
.in(RolePermission::getRoleId, roleIds)
|
||||||
|
|
@ -112,4 +117,29 @@ public class PermissionServiceImpl implements PermissionService {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查文件id列表是否可具有导出权限
|
||||||
|
* @param ids
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String[] filterExportIds(String[] ids){
|
||||||
|
if (ids.length==0) {
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
String userId=UserThreadLocal.getUserId();
|
||||||
|
List<String> roleIds = getRoles(userId);
|
||||||
|
List<String> result = new ArrayList<>();
|
||||||
|
for (String id : ids) {
|
||||||
|
LambdaQueryWrapper<RolePermission> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(RolePermission::getFileId, id)
|
||||||
|
.eq(RolePermission::getPermissionCode, FilePermission.EXPORT.getCode())
|
||||||
|
.in(RolePermission::getRoleId, roleIds);
|
||||||
|
List<RolePermission> list = rolePermissionMapper.selectList(queryWrapper);
|
||||||
|
if (!list.isEmpty()) {
|
||||||
|
result.add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.toArray(new String[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.electromagnetic.industry.software.common.annotations;
|
||||||
|
|
||||||
|
import com.electromagnetic.industry.software.common.enums.FilePermission;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.METHOD)
|
||||||
|
public @interface RequiredPermission {
|
||||||
|
FilePermission value();
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue