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