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 @@ |
|||||||
|
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 @@ |
|||||||
|
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 @@ |
|||||||
|
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 @@ |
|||||||
|
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