Browse Source
- 新增IRolePermissionSchemaService接口及其实现类,管理角色与数据规则方案关联关系 - 添加RolePermissionSchema实体模型,定义角色-数据规则方案关联表结构 - 修改PermissionDataRuleSchema模型,将formId字段更名为formHeadId,新增formIdList字段 - 实现根据当前用户角色查询启用数据规则的功能,支持按表单匹配规则 - 在角色管理控制器中新增数据规则绑定参数,支持角色创建和更新时绑定数据规则方案 - 实现数据规则详情接口回显功能,填充绑定的在线表单列表 - 重构在线表单列表数据ORM服务中的权限规则查询逻辑 - 移除角色删除时的数据规则绑定清理逻辑 - 更新系统角色VO,将部门列表替换为数据规则方案ID列表feature/2026-07-ccc-dev
15 changed files with 378 additions and 65 deletions
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
package apelet.common.online.dao; |
||||
|
||||
import apelet.common.core.base.dao.BaseDaoMapper; |
||||
import apelet.common.online.model.RolePermissionSchema; |
||||
|
||||
/** |
||||
* 角色-数据规则方案关联表 Mapper 接口。 |
||||
* |
||||
* @author chenchuchuan |
||||
* @date 2026-08-05 |
||||
*/ |
||||
public interface RolePermissionSchemaMapper extends BaseDaoMapper<RolePermissionSchema> { |
||||
} |
||||
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
package apelet.common.online.model; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* 角色-数据规则方案关联实体对象(role_id + schema_id 联合主键)。 |
||||
* |
||||
* @author chenchuchuan |
||||
* @date 2026-08-05 |
||||
*/ |
||||
@Data |
||||
@TableName(value = "zz_role_permission_schema") |
||||
public class RolePermissionSchema { |
||||
|
||||
/** |
||||
* 角色ID。 |
||||
*/ |
||||
@TableField(value = "role_id") |
||||
private Long roleId; |
||||
|
||||
/** |
||||
* 规则方案ID(关联 zz_permission_data_rule_schema.id)。 |
||||
*/ |
||||
@TableField(value = "schema_id") |
||||
private Long schemaId; |
||||
} |
||||
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
package apelet.common.online.service; |
||||
|
||||
import apelet.common.core.base.service.IBaseService; |
||||
import apelet.common.core.object.CallResult; |
||||
import apelet.common.online.model.RolePermissionSchema; |
||||
|
||||
import java.util.Collection; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 角色-数据规则方案关联服务接口。 |
||||
* |
||||
* @author chenchuchuan |
||||
* @date 2026-08-05 |
||||
*/ |
||||
public interface IRolePermissionSchemaService extends IBaseService<RolePermissionSchema, Long> { |
||||
|
||||
/** |
||||
* 查询指定角色绑定的所有数据规则方案。 |
||||
* |
||||
* @param roleId 角色ID。 |
||||
* @return 关联关系列表。 |
||||
*/ |
||||
List<RolePermissionSchema> listByRoleId(Long roleId); |
||||
|
||||
/** |
||||
* 根据多个角色ID查询绑定的数据规则方案(运行时用)。 |
||||
* |
||||
* @param roleIds 角色ID集合。 |
||||
* @return 关联关系列表。 |
||||
*/ |
||||
List<RolePermissionSchema> listByRoleIds(Collection<Long> roleIds); |
||||
|
||||
/** |
||||
* 绑定角色的数据规则方案(先删后插)。schemaIdList 为空表示清空该角色的全部绑定。 |
||||
* |
||||
* @param roleId 角色ID。 |
||||
* @param schemaIdList 数据规则方案ID列表。 |
||||
* @return 绑定结果,校验失败时返回错误信息。 |
||||
*/ |
||||
CallResult bindRoleSchemas(Long roleId, List<Long> schemaIdList); |
||||
|
||||
/** |
||||
* 删除角色下绑定的所有数据规则方案(角色删除时调用)。 |
||||
* |
||||
* @param roleId 角色ID。 |
||||
*/ |
||||
void removeByRoleId(Long roleId); |
||||
} |
||||
@ -0,0 +1,89 @@
@@ -0,0 +1,89 @@
|
||||
package apelet.common.online.service.impl; |
||||
|
||||
import apelet.common.core.base.dao.BaseDaoMapper; |
||||
import apelet.common.core.base.service.BaseService; |
||||
import apelet.common.core.object.CallResult; |
||||
import apelet.common.online.dao.RolePermissionSchemaMapper; |
||||
import apelet.common.online.model.RolePermissionSchema; |
||||
import apelet.common.online.service.IPermissionDataRuleSchemaService; |
||||
import apelet.common.online.service.IRolePermissionSchemaService; |
||||
import cn.hutool.core.collection.CollUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.stereotype.Service; |
||||
import org.springframework.transaction.annotation.Transactional; |
||||
|
||||
import java.util.Collection; |
||||
import java.util.Collections; |
||||
import java.util.HashSet; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 角色-数据规则方案关联服务实现类。 |
||||
* |
||||
* @author chenchuchuan |
||||
* @date 2026-08-05 |
||||
*/ |
||||
@Service("rolePermissionSchemaService") |
||||
@Slf4j |
||||
public class RolePermissionSchemaServiceImpl extends BaseService<RolePermissionSchema, Long> implements IRolePermissionSchemaService { |
||||
|
||||
@Autowired |
||||
private RolePermissionSchemaMapper mapper; |
||||
|
||||
@Autowired |
||||
private IPermissionDataRuleSchemaService permissionDataRuleSchemaService; |
||||
|
||||
@Override |
||||
protected BaseDaoMapper<RolePermissionSchema> mapper() { |
||||
return mapper; |
||||
} |
||||
|
||||
@Override |
||||
public List<RolePermissionSchema> listByRoleId(Long roleId) { |
||||
LambdaQueryWrapper<RolePermissionSchema> qw = new LambdaQueryWrapper<>(); |
||||
qw.eq(RolePermissionSchema::getRoleId, roleId); |
||||
return this.list(qw); |
||||
} |
||||
|
||||
@Override |
||||
public List<RolePermissionSchema> listByRoleIds(Collection<Long> roleIds) { |
||||
if (CollUtil.isEmpty(roleIds)) { |
||||
return Collections.emptyList(); |
||||
} |
||||
LambdaQueryWrapper<RolePermissionSchema> qw = new LambdaQueryWrapper<>(); |
||||
qw.in(RolePermissionSchema::getRoleId, roleIds); |
||||
return this.list(qw); |
||||
} |
||||
|
||||
@Transactional(rollbackFor = Exception.class) |
||||
@Override |
||||
public CallResult bindRoleSchemas(Long roleId, List<Long> schemaIdList) { |
||||
// 1. 校验数据规则方案是否存在
|
||||
if (CollUtil.isNotEmpty(schemaIdList)) { |
||||
if (!permissionDataRuleSchemaService.existAllPrimaryKeys(new HashSet<>(schemaIdList))) { |
||||
return CallResult.error("数据验证失败,存在不合法的数据规则方案,请刷新后重试!"); |
||||
} |
||||
} |
||||
// 2. 先删除该角色原有的绑定
|
||||
this.removeByRoleId(roleId); |
||||
// 3. 再插入新的绑定
|
||||
if (CollUtil.isNotEmpty(schemaIdList)) { |
||||
for (Long schemaId : schemaIdList) { |
||||
RolePermissionSchema roleSchema = new RolePermissionSchema(); |
||||
roleSchema.setRoleId(roleId); |
||||
roleSchema.setSchemaId(schemaId); |
||||
this.save(roleSchema); |
||||
} |
||||
} |
||||
return CallResult.ok(); |
||||
} |
||||
|
||||
@Override |
||||
public void removeByRoleId(Long roleId) { |
||||
LambdaQueryWrapper<RolePermissionSchema> qw = new LambdaQueryWrapper<>(); |
||||
qw.eq(RolePermissionSchema::getRoleId, roleId); |
||||
this.remove(qw); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue