diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/constants/PermissionCodeConstants.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/constants/PermissionCodeConstants.java index bf7458604..90aeefe3c 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/constants/PermissionCodeConstants.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/constants/PermissionCodeConstants.java @@ -134,8 +134,13 @@ public interface PermissionCodeConstants { String AUTH_RESOURCE = "AUTH_RESOURCE"; /** - * 在线用户界面的取消奶奶控制标识 + * 在线用户界面的权限标识 */ String ONLINE_USER = "ONLINE_USER"; + /** + * 修改权限的权限范围权限标识 + */ + String CHANGE_ROLE_BIND_LIMIT = "CHANGE_ROLE_BIND_LIMIT"; + } diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/controller/SysRoleLimitController.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/controller/SysRoleLimitController.java new file mode 100644 index 000000000..7f0b39961 --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/controller/SysRoleLimitController.java @@ -0,0 +1,64 @@ +package cn.stylefeng.roses.kernel.sys.modular.role.controller; + +import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; +import cn.stylefeng.roses.kernel.sys.api.constants.PermissionCodeConstants; +import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest; +import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse; +import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * 角色权限限制控制器 + *

+ * 除了超级管理员拥有权限绑定外,如果其他角色的成员也需要绑定权限,那么需要在权限绑定界面绑定权限限制 + * + * @author fengshuonan + * @date 2023/09/08 12:55 + */ +@RestController +@ApiResource(name = "角色权限限制") +public class SysRoleLimitController { + + @Resource + private SysRoleLimitService sysRoleLimitService; + + /** + * 获取角色的权限限制列表,和角色绑定权限界面返回的数据结构一样 + * + * @author fengshuonan + * @since 2023/9/8 13:08 + */ + @GetResource(name = "获取角色的权限限制列表", path = "/roleLimit/getRoleLimit", requiredPermission = true, + requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT) + public ResponseData getRoleBindLimit( + @Validated(BaseRequest.detail.class) RoleBindPermissionRequest roleBindPermissionRequest) { + + + return new SuccessResponseData<>(); + } + + /** + * 绑定角色的限制列表 + * + * @author fengshuonan + * @since 2023/9/8 13:09 + */ + @PostResource(name = "绑定角色权限的限制列表", path = "/roleLimit/bindRoleLimit", requiredPermission = true, + requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT) + public ResponseData bindRoleLimit(@RequestBody @Validated(RoleBindPermissionRequest.roleBindPermission.class) + RoleBindPermissionRequest roleBindPermissionRequest) { + + + return new SuccessResponseData<>(); + } + +} diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/entity/SysRoleLimit.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/entity/SysRoleLimit.java new file mode 100644 index 000000000..14123509d --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/entity/SysRoleLimit.java @@ -0,0 +1,51 @@ +package cn.stylefeng.roses.kernel.sys.modular.role.entity; + +import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; +import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 角色权限限制实例类 + * + * @author fengshuonan + * @date 2023/09/08 12:55 + */ +@TableName("sys_role_limit") +@Data +@EqualsAndHashCode(callSuper = true) +public class SysRoleLimit extends BaseEntity { + + /** + * 主键 + */ + @TableId(value = "role_limit_id", type = IdType.ASSIGN_ID) + @ChineseDescription("主键") + private Long roleLimitId; + + /** + * 角色id + */ + @TableField("role_id") + @ChineseDescription("角色id") + private Long roleId; + + /** + * 角色限制类型:1-角色可分配的菜单,2-角色可分配的功能 + */ + @TableField("limit_type") + @ChineseDescription("角色限制类型:1-角色可分配的菜单,2-角色可分配的功能") + private Integer limitType; + + /** + * 业务id,为菜单id或菜单功能id + */ + @TableField("business_id") + @ChineseDescription("业务id,为菜单id或菜单功能id") + private Long businessId; + +} diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/enums/SysRoleLimitExceptionEnum.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/enums/SysRoleLimitExceptionEnum.java new file mode 100644 index 000000000..2cd03851d --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/enums/SysRoleLimitExceptionEnum.java @@ -0,0 +1,36 @@ +package cn.stylefeng.roses.kernel.sys.modular.role.enums; + +import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; +import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum; +import lombok.Getter; + +/** + * 角色权限限制异常相关枚举 + * + * @author fengshuonan + * @date 2023/09/08 12:55 + */ +@Getter +public enum SysRoleLimitExceptionEnum implements AbstractExceptionEnum { + + /** + * 查询结果不存在 + */ + SYS_ROLE_LIMIT_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"); + + /** + * 错误编码 + */ + private final String errorCode; + + /** + * 提示用户信息 + */ + private final String userTip; + + SysRoleLimitExceptionEnum(String errorCode, String userTip) { + this.errorCode = errorCode; + this.userTip = userTip; + } + +} \ No newline at end of file diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/mapper/SysRoleLimitMapper.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/mapper/SysRoleLimitMapper.java new file mode 100644 index 000000000..cd66367a0 --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/mapper/SysRoleLimitMapper.java @@ -0,0 +1,14 @@ +package cn.stylefeng.roses.kernel.sys.modular.role.mapper; + +import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 角色权限限制 Mapper 接口 + * + * @author fengshuonan + * @date 2023/09/08 12:55 + */ +public interface SysRoleLimitMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/mapper/mapping/SysRoleLimitMapper.xml b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/mapper/mapping/SysRoleLimitMapper.xml new file mode 100644 index 000000000..f9f4e3e22 --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/mapper/mapping/SysRoleLimitMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/pojo/request/SysRoleLimitRequest.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/pojo/request/SysRoleLimitRequest.java new file mode 100644 index 000000000..d53af97ff --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/pojo/request/SysRoleLimitRequest.java @@ -0,0 +1,48 @@ +package cn.stylefeng.roses.kernel.sys.modular.role.pojo.request; + +import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; +import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +/** + * 角色权限限制封装类 + * + * @author fengshuonan + * @date 2023/09/08 12:55 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class SysRoleLimitRequest extends BaseRequest { + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = {edit.class, delete.class}) + @ChineseDescription("主键") + private Long roleLimitId; + + /** + * 角色id + */ + @NotNull(message = "角色id不能为空", groups = {add.class, edit.class}) + @ChineseDescription("角色id") + private Long roleId; + + /** + * 角色限制类型:1-角色可分配的菜单,2-角色可分配的功能 + */ + @NotNull(message = "角色限制类型:1-角色可分配的菜单,2-角色可分配的功能不能为空", groups = {add.class, edit.class}) + @ChineseDescription("角色限制类型:1-角色可分配的菜单,2-角色可分配的功能") + private Integer limitType; + + /** + * 业务id,为菜单id或菜单功能id + */ + @NotNull(message = "业务id,为菜单id或菜单功能id不能为空", groups = {add.class, edit.class}) + @ChineseDescription("业务id,为菜单id或菜单功能id") + private Long businessId; + +} diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/SysRoleLimitService.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/SysRoleLimitService.java new file mode 100644 index 000000000..8a72b04d9 --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/SysRoleLimitService.java @@ -0,0 +1,74 @@ +package cn.stylefeng.roses.kernel.sys.modular.role.service; + +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit; +import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleLimitRequest; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * 角色权限限制 服务类 + * + * @author fengshuonan + * @date 2023/09/08 12:55 + */ +public interface SysRoleLimitService extends IService { + + /** + * 新增 + * + * @param sysRoleLimitRequest 请求参数 + * @author fengshuonan + * @date 2023/09/08 12:55 + */ + void add(SysRoleLimitRequest sysRoleLimitRequest); + + /** + * 删除 + * + * @param sysRoleLimitRequest 请求参数 + * @author fengshuonan + * @date 2023/09/08 12:55 + */ + void del(SysRoleLimitRequest sysRoleLimitRequest); + + /** + * 编辑 + * + * @param sysRoleLimitRequest 请求参数 + * @author fengshuonan + * @date 2023/09/08 12:55 + */ + void edit(SysRoleLimitRequest sysRoleLimitRequest); + + /** + * 查询详情 + * + * @param sysRoleLimitRequest 请求参数 + * @author fengshuonan + * @date 2023/09/08 12:55 + */ + SysRoleLimit detail(SysRoleLimitRequest sysRoleLimitRequest); + + /** + * 获取列表 + * + * @param sysRoleLimitRequest 请求参数 + * @return List 返回结果 + * @author fengshuonan + * @date 2023/09/08 12:55 + */ + List findList(SysRoleLimitRequest sysRoleLimitRequest); + + /** + * 获取列表(带分页) + * + * @param sysRoleLimitRequest 请求参数 + * @return PageResult 返回结果 + * @author fengshuonan + * @date 2023/09/08 12:55 + */ + PageResult findPage(SysRoleLimitRequest sysRoleLimitRequest); + +} \ No newline at end of file diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleLimitServiceImpl.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleLimitServiceImpl.java new file mode 100644 index 000000000..d084c5d84 --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleLimitServiceImpl.java @@ -0,0 +1,104 @@ +package cn.stylefeng.roses.kernel.sys.modular.role.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; +import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; +import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit; +import cn.stylefeng.roses.kernel.sys.modular.role.enums.SysRoleLimitExceptionEnum; +import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleLimitMapper; +import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleLimitRequest; +import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 角色权限限制业务实现层 + * + * @author fengshuonan + * @date 2023/09/08 12:55 + */ +@Service +public class SysRoleLimitServiceImpl extends ServiceImpl implements SysRoleLimitService { + + @Override + public void add(SysRoleLimitRequest sysRoleLimitRequest) { + SysRoleLimit sysRoleLimit = new SysRoleLimit(); + BeanUtil.copyProperties(sysRoleLimitRequest, sysRoleLimit); + this.save(sysRoleLimit); + } + + @Override + public void del(SysRoleLimitRequest sysRoleLimitRequest) { + SysRoleLimit sysRoleLimit = this.querySysRoleLimit(sysRoleLimitRequest); + this.removeById(sysRoleLimit.getRoleLimitId()); + } + + @Override + public void edit(SysRoleLimitRequest sysRoleLimitRequest) { + SysRoleLimit sysRoleLimit = this.querySysRoleLimit(sysRoleLimitRequest); + BeanUtil.copyProperties(sysRoleLimitRequest, sysRoleLimit); + this.updateById(sysRoleLimit); + } + + @Override + public SysRoleLimit detail(SysRoleLimitRequest sysRoleLimitRequest) { + return this.querySysRoleLimit(sysRoleLimitRequest); + } + + @Override + public PageResult findPage(SysRoleLimitRequest sysRoleLimitRequest) { + LambdaQueryWrapper wrapper = createWrapper(sysRoleLimitRequest); + Page sysRolePage = this.page(PageFactory.defaultPage(), wrapper); + return PageResultFactory.createPageResult(sysRolePage); + } + + @Override + public List findList(SysRoleLimitRequest sysRoleLimitRequest) { + LambdaQueryWrapper wrapper = this.createWrapper(sysRoleLimitRequest); + return this.list(wrapper); + } + + /** + * 获取信息 + * + * @author fengshuonan + * @date 2023/09/08 12:55 + */ + private SysRoleLimit querySysRoleLimit(SysRoleLimitRequest sysRoleLimitRequest) { + SysRoleLimit sysRoleLimit = this.getById(sysRoleLimitRequest.getRoleLimitId()); + if (ObjectUtil.isEmpty(sysRoleLimit)) { + throw new ServiceException(SysRoleLimitExceptionEnum.SYS_ROLE_LIMIT_NOT_EXISTED); + } + return sysRoleLimit; + } + + /** + * 创建查询wrapper + * + * @author fengshuonan + * @date 2023/09/08 12:55 + */ + private LambdaQueryWrapper createWrapper(SysRoleLimitRequest sysRoleLimitRequest) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + Long roleLimitId = sysRoleLimitRequest.getRoleLimitId(); + Long roleId = sysRoleLimitRequest.getRoleId(); + Integer limitType = sysRoleLimitRequest.getLimitType(); + Long businessId = sysRoleLimitRequest.getBusinessId(); + + queryWrapper.eq(ObjectUtil.isNotNull(roleLimitId), SysRoleLimit::getRoleLimitId, roleLimitId); + queryWrapper.eq(ObjectUtil.isNotNull(roleId), SysRoleLimit::getRoleId, roleId); + queryWrapper.eq(ObjectUtil.isNotNull(limitType), SysRoleLimit::getLimitType, limitType); + queryWrapper.eq(ObjectUtil.isNotNull(businessId), SysRoleLimit::getBusinessId, businessId); + + return queryWrapper; + } + +} \ No newline at end of file