feat(framework): 添加数据权限注解并优化相关功能
- 新增 @DataPermission 注解用于方法级别数据权限控制 - 在多个控制器中添加 @DataPermission 注解以启用数据权限 - 优化部分实体类和 Mapper XML 文件以支持数据权限 - 重构部分查询方法以适应数据权限控制
This commit is contained in:
parent
94a97f3568
commit
24b7b4093a
@ -2,6 +2,9 @@ package com.zsc.edu.gateway.framework.mybatisplus;
|
|||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author vertoryao
|
||||||
|
*/
|
||||||
@Target(ElementType.METHOD)
|
@Target(ElementType.METHOD)
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Documented
|
@Documented
|
||||||
|
@ -7,7 +7,6 @@ import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.sf.jsqlparser.expression.Expression;
|
import net.sf.jsqlparser.expression.Expression;
|
||||||
import net.sf.jsqlparser.expression.LongValue;
|
import net.sf.jsqlparser.expression.LongValue;
|
||||||
import net.sf.jsqlparser.expression.Parenthesis;
|
|
||||||
import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
|
import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
|
||||||
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
|
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
|
||||||
import net.sf.jsqlparser.expression.operators.relational.InExpression;
|
import net.sf.jsqlparser.expression.operators.relational.InExpression;
|
||||||
|
@ -2,7 +2,6 @@ package com.zsc.edu.gateway.framework.mybatisplus;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IEnum;
|
import com.baomidou.mybatisplus.annotation.IEnum;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum DataScopeType implements IEnum<Integer> {
|
public enum DataScopeType implements IEnum<Integer> {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.zsc.edu.gateway.modules.iot.device.controller;
|
package com.zsc.edu.gateway.modules.iot.device.controller;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
|
||||||
import com.zsc.edu.gateway.modules.iot.device.dto.BatchDeviceDto;
|
import com.zsc.edu.gateway.modules.iot.device.dto.BatchDeviceDto;
|
||||||
import com.zsc.edu.gateway.modules.iot.device.dto.DeviceDto;
|
import com.zsc.edu.gateway.modules.iot.device.dto.DeviceDto;
|
||||||
import com.zsc.edu.gateway.modules.iot.device.dto.DeviceServeDto;
|
import com.zsc.edu.gateway.modules.iot.device.dto.DeviceServeDto;
|
||||||
@ -63,6 +64,7 @@ public class DeviceController {
|
|||||||
/**
|
/**
|
||||||
* 分页查询设备
|
* 分页查询设备
|
||||||
*/
|
*/
|
||||||
|
@DataPermission
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("hasAuthority('iot:device:query')")
|
@PreAuthorize("hasAuthority('iot:device:query')")
|
||||||
public Page<Device> query(Page<Device> page, DeviceQuery query) {
|
public Page<Device> query(Page<Device> page, DeviceQuery query) {
|
||||||
|
@ -90,6 +90,7 @@ public class Device extends BaseEntity {
|
|||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
public Product product;
|
public Product product;
|
||||||
|
|
||||||
|
|
||||||
public enum Status implements IEnum<Integer>, IState<Status> {
|
public enum Status implements IEnum<Integer>, IState<Status> {
|
||||||
UNACTIVATED(0, "未激活"),
|
UNACTIVATED(0, "未激活"),
|
||||||
LOCKED(1, "已锁定"),
|
LOCKED(1, "已锁定"),
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.zsc.edu.gateway.modules.message.controller;
|
package com.zsc.edu.gateway.modules.message.controller;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
|
||||||
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
||||||
import com.zsc.edu.gateway.modules.message.dto.BulletinDto;
|
import com.zsc.edu.gateway.modules.message.dto.BulletinDto;
|
||||||
import com.zsc.edu.gateway.modules.message.entity.Bulletin;
|
import com.zsc.edu.gateway.modules.message.entity.Bulletin;
|
||||||
@ -42,6 +43,7 @@ public class BulletinController {
|
|||||||
* @param query 查询表单
|
* @param query 查询表单
|
||||||
* @return 分页数据
|
* @return 分页数据
|
||||||
*/
|
*/
|
||||||
|
@DataPermission
|
||||||
@GetMapping("/self")
|
@GetMapping("/self")
|
||||||
public Page<Bulletin> getBulletins(Page<Bulletin> page, BulletinQuery query) {
|
public Page<Bulletin> getBulletins(Page<Bulletin> page, BulletinQuery query) {
|
||||||
query.setState(Bulletin.State.publish);
|
query.setState(Bulletin.State.publish);
|
||||||
@ -66,7 +68,8 @@ public class BulletinController {
|
|||||||
* @param query 查询参数
|
* @param query 查询参数
|
||||||
* @return 分页数据
|
* @return 分页数据
|
||||||
*/
|
*/
|
||||||
@GetMapping()
|
@DataPermission
|
||||||
|
@GetMapping
|
||||||
@PreAuthorize("hasAuthority('message:bulletin:query')")
|
@PreAuthorize("hasAuthority('message:bulletin:query')")
|
||||||
public Page<Bulletin> query(Page<Bulletin> page, BulletinQuery query) {
|
public Page<Bulletin> query(Page<Bulletin> page, BulletinQuery query) {
|
||||||
return service.page(page, query.wrapper());
|
return service.page(page, query.wrapper());
|
||||||
|
@ -2,6 +2,7 @@ package com.zsc.edu.gateway.modules.message.controller;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
|
||||||
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
||||||
import com.zsc.edu.gateway.modules.message.dto.UserNoticeDto;
|
import com.zsc.edu.gateway.modules.message.dto.UserNoticeDto;
|
||||||
import com.zsc.edu.gateway.modules.message.query.AdminNoticeQuery;
|
import com.zsc.edu.gateway.modules.message.query.AdminNoticeQuery;
|
||||||
@ -47,6 +48,7 @@ public class UserNoticeController {
|
|||||||
* @param query 查询参数
|
* @param query 查询参数
|
||||||
* @return 分页数据
|
* @return 分页数据
|
||||||
*/
|
*/
|
||||||
|
@DataPermission(tableAlias = "su")
|
||||||
@GetMapping("/self")
|
@GetMapping("/self")
|
||||||
public IPage<UserNoticeVo> selfPage(Page<UserNoticeVo> pageParam, @AuthenticationPrincipal UserDetailsImpl userDetails, UserNoticeQuery query) {
|
public IPage<UserNoticeVo> selfPage(Page<UserNoticeVo> pageParam, @AuthenticationPrincipal UserDetailsImpl userDetails, UserNoticeQuery query) {
|
||||||
query.userId = userDetails.id;
|
query.userId = userDetails.id;
|
||||||
@ -106,6 +108,7 @@ public class UserNoticeController {
|
|||||||
* @param query 查询参数
|
* @param query 查询参数
|
||||||
* @return 分页数据
|
* @return 分页数据
|
||||||
*/
|
*/
|
||||||
|
@DataPermission(tableAlias = "su")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("hasAuthority('message:notice:query')")
|
@PreAuthorize("hasAuthority('message:notice:query')")
|
||||||
public IPage<AdminNoticeVo> page(Page<AdminNoticeVo> page, AdminNoticeQuery query) {
|
public IPage<AdminNoticeVo> page(Page<AdminNoticeVo> page, AdminNoticeQuery query) {
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
package com.zsc.edu.gateway.modules.message.query;
|
package com.zsc.edu.gateway.modules.message.query;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.zsc.edu.gateway.modules.message.entity.Bulletin;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhuang
|
* @author zhuang
|
||||||
@ -35,4 +39,5 @@ public class AdminNoticeQuery {
|
|||||||
*/
|
*/
|
||||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
public LocalDateTime createAtEnd;
|
public LocalDateTime createAtEnd;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package com.zsc.edu.gateway.modules.system.controller;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.zsc.edu.gateway.exception.ConstraintException;
|
import com.zsc.edu.gateway.exception.ConstraintException;
|
||||||
|
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
|
||||||
import com.zsc.edu.gateway.modules.system.dto.DeptDto;
|
import com.zsc.edu.gateway.modules.system.dto.DeptDto;
|
||||||
import com.zsc.edu.gateway.modules.system.entity.Dept;
|
import com.zsc.edu.gateway.modules.system.entity.Dept;
|
||||||
import com.zsc.edu.gateway.modules.system.entity.User;
|
import com.zsc.edu.gateway.modules.system.entity.User;
|
||||||
@ -29,11 +30,12 @@ public class DeptController {
|
|||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回管理部门列表 hasAuthority('SYSTEM:DEPT:QUERY')
|
* 返回管理部门分页 hasAuthority('SYSTEM:DEPT:QUERY')
|
||||||
*
|
*
|
||||||
* @param query 查询表单
|
* @param query 查询表单
|
||||||
* @return 部门列表
|
* @return 部门列表
|
||||||
*/
|
*/
|
||||||
|
@DataPermission
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("hasAuthority('system:dept:query')")
|
@PreAuthorize("hasAuthority('system:dept:query')")
|
||||||
public Page<Dept> query(DeptQuery query, Page<Dept> page) {
|
public Page<Dept> query(DeptQuery query, Page<Dept> page) {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.zsc.edu.gateway.modules.system.controller;
|
package com.zsc.edu.gateway.modules.system.controller;
|
||||||
|
|
||||||
|
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
|
||||||
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
||||||
import com.zsc.edu.gateway.modules.system.dto.MenuDto;
|
import com.zsc.edu.gateway.modules.system.dto.MenuDto;
|
||||||
import com.zsc.edu.gateway.modules.system.entity.Menu;
|
import com.zsc.edu.gateway.modules.system.entity.Menu;
|
||||||
@ -52,6 +53,7 @@ public class MenuController {
|
|||||||
/**
|
/**
|
||||||
* 根据名字返回树
|
* 根据名字返回树
|
||||||
*/
|
*/
|
||||||
|
@DataPermission
|
||||||
@GetMapping("/tree")
|
@GetMapping("/tree")
|
||||||
@PreAuthorize("hasAuthority('system:menu:query')")
|
@PreAuthorize("hasAuthority('system:menu:query')")
|
||||||
public List<MenuVo> tree(@AuthenticationPrincipal UserDetailsImpl userDetails, @RequestParam String name) {
|
public List<MenuVo> tree(@AuthenticationPrincipal UserDetailsImpl userDetails, @RequestParam String name) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.zsc.edu.gateway.modules.system.controller;
|
package com.zsc.edu.gateway.modules.system.controller;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
|
||||||
import com.zsc.edu.gateway.modules.system.dto.AuthorityCreateDto;
|
import com.zsc.edu.gateway.modules.system.dto.AuthorityCreateDto;
|
||||||
//import com.zsc.edu.gateway.modules.system.dto.RoleAuthCreateDto;
|
//import com.zsc.edu.gateway.modules.system.dto.RoleAuthCreateDto;
|
||||||
import com.zsc.edu.gateway.modules.system.dto.RoleDto;
|
import com.zsc.edu.gateway.modules.system.dto.RoleDto;
|
||||||
@ -33,6 +34,7 @@ public class RoleController {
|
|||||||
*
|
*
|
||||||
* @return 所有角色列表
|
* @return 所有角色列表
|
||||||
*/
|
*/
|
||||||
|
@DataPermission
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("hasAuthority('system:role:query')")
|
@PreAuthorize("hasAuthority('system:role:query')")
|
||||||
public Page<Role> query(RoleQuery query, Page<Role> page) {
|
public Page<Role> query(RoleQuery query, Page<Role> page) {
|
||||||
|
@ -3,6 +3,7 @@ package com.zsc.edu.gateway.modules.system.controller;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
|
||||||
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
|
||||||
import com.zsc.edu.gateway.modules.system.dto.UserCreateDto;
|
import com.zsc.edu.gateway.modules.system.dto.UserCreateDto;
|
||||||
import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdateDto;
|
import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdateDto;
|
||||||
@ -110,6 +111,7 @@ public class UserController {
|
|||||||
* @param page 分页
|
* @param page 分页
|
||||||
* @return 分页用户信息
|
* @return 分页用户信息
|
||||||
*/
|
*/
|
||||||
|
@DataPermission
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@PreAuthorize("hasAuthority('system:user:query')")
|
@PreAuthorize("hasAuthority('system:user:query')")
|
||||||
public Page<User> query(UserQuery query, Page<User> page) {
|
public Page<User> query(UserQuery query, Page<User> page) {
|
||||||
|
@ -28,6 +28,11 @@ public class BaseEntity implements Serializable {
|
|||||||
*/
|
*/
|
||||||
public String remark;
|
public String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建者ID
|
||||||
|
*/
|
||||||
|
public Long createId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
<result column="create_time" jdbcType="DATE" property="createTime"/>
|
<result column="create_time" jdbcType="DATE" property="createTime"/>
|
||||||
<result column="update_time" jdbcType="DATE" property="updateTime"/>
|
<result column="update_time" jdbcType="DATE" property="updateTime"/>
|
||||||
<result column="remark" jdbcType="VARCHAR" property="remark"/>
|
<result column="remark" jdbcType="VARCHAR" property="remark"/>
|
||||||
|
<result column="create_id" jdbcType="BIGINT" property="createId"/>
|
||||||
<collection property="params" ofType="com.zsc.edu.gateway.modules.iot.tsl.entity.Param" autoMapping="true"
|
<collection property="params" ofType="com.zsc.edu.gateway.modules.iot.tsl.entity.Param" autoMapping="true"
|
||||||
columnPrefix="param_">
|
columnPrefix="param_">
|
||||||
<id column="id" property="id"/>
|
<id column="id" property="id"/>
|
||||||
|
@ -49,9 +49,12 @@
|
|||||||
|
|
||||||
<select id="page" resultType="com.zsc.edu.gateway.modules.message.vo.UserNoticeVo" resultMap="userNoticeMap">
|
<select id="page" resultType="com.zsc.edu.gateway.modules.message.vo.UserNoticeVo" resultMap="userNoticeMap">
|
||||||
select sun.*,sn.*,su.username,su.address,su.avatar,su.name
|
select sun.*,sn.*,su.username,su.address,su.avatar,su.name
|
||||||
from sys_user_notice sun
|
FROM
|
||||||
left join sys_user su on sun.user_id = su.id
|
sys_user su
|
||||||
left join sys_notice sn on sn.id = sun.notice_id
|
LEFT JOIN
|
||||||
|
sys_user_notice sun ON sun.user_id = su.id
|
||||||
|
LEFT JOIN
|
||||||
|
sys_notice sn ON sn.id = sun.notice_id
|
||||||
<where>
|
<where>
|
||||||
<if test="query.userId != null">
|
<if test="query.userId != null">
|
||||||
AND sun.user_id = #{query.userId}
|
AND sun.user_id = #{query.userId}
|
||||||
@ -85,9 +88,9 @@
|
|||||||
COUNT(DISTINCT sun.user_id) AS user_count, -- 统计用户的关联数量
|
COUNT(DISTINCT sun.user_id) AS user_count, -- 统计用户的关联数量
|
||||||
SUM(CASE WHEN sun.is_read = true THEN 1 ELSE 0 END) AS read_count -- 统计已读数量
|
SUM(CASE WHEN sun.is_read = true THEN 1 ELSE 0 END) AS read_count -- 统计已读数量
|
||||||
FROM
|
FROM
|
||||||
sys_user_notice sun
|
sys_user su
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
sys_user su ON sun.user_id = su.id
|
sys_user_notice sun ON sun.user_id = su.id
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
sys_notice sn ON sn.id = sun.notice_id
|
sys_notice sn ON sn.id = sun.notice_id
|
||||||
<where>
|
<where>
|
||||||
|
BIN
storage/attachment/e9fcf034c24b9e51ee8ca0430c26378de42b6f78
Normal file
BIN
storage/attachment/e9fcf034c24b9e51ee8ca0430c26378de42b6f78
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
Loading…
Reference in New Issue
Block a user