Files
iotlcm/schema/09-seed-role-chain.sql
T
MiFaZhan bc2c7bcc6b init: IotLCM 开源版部署仓
内容:
- docker-compose.yml:14 个基础/业务服务 + 3 个可选 profile(with-mock 挡板、with-bot、with-nginx)
- .env.example:集中管理镜像仓库、口令、端口;必填项缺失时 compose 直接报错退出
- config.example/:10 份配置模板,全部为占位值与注释说明
- schema/:12 个初始化脚本,按文件名顺序由 MySQL initdb 自动执行

脱敏处理:
- 生产/内网 IP、镜像仓库地址、公司名、真实域名全部清除
- 演示账号保留 18 个(出库与划拨依赖账号与部门树的关联),
  昵称/邮箱/手机号/登录IP/头像改为占位或编造值
- 数据库账号与 admin 口令改为初始化时按 .env 注入计算
- 通道模板与 Mock 通道的上游密钥置空
- Mock 通道地址指向 compose 内 onelink-mock 服务

部署时用 --profile with-mock 启动运营商接口挡板,即可在无真实运营商环境时跑通全链路。
2026-10-28 13:40:12 +08:00

78 lines
4.0 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================
-- 演示环境:模板参数与生产旧版本的下发标记(2026-10-27)
--
-- 版本依据:生产环境 当前运行 admin 镜像 db11766c...,
-- 二进制 CommitID=cad19df988a0;演示环境镜像及程序 SHA256 与生产一致。
-- 不以浮动 tag、master HEAD 或历史发布记录代替实际运行版本。
--
-- cad19df 的 passRoleByDept(agent_dept.go:496):
-- 仅“当前机构 == 模板机构”走平台模板;其他机构仍查本级唯一
-- status=0 / is_pass=1 角色,即使已经配置平台模板也是如此。
-- 因此只配置 agent.role.template.role_id 不能解决代理建下级报错。
--
-- 本文件:
-- 1. 修正现有 role 2 的模板属性,并写入唯一的演示模板参数。
-- 2. 若测试库已有 dept 172 → role 82,则为该现有角色设置 is_pass=1。
-- 不创建角色、机构或账号,不改菜单和 sys_dept.dept_role。
-- 全新库没有 role 82 时跳过;它是测试期间创建的一级代理角色。
--
-- 限制:cad19df 的 createEnterpriseRole 仍将新角色 IsPass 写为 0。
-- 新建机构继续创建下级前,仍需配置本机构唯一的下发角色;
-- 此 SQL 不是多级下发代码修复,不代表新建三级及以后均已通过验收。
-- 不自动补建业务方故意删除的 dept 2/4/5/6/7 角色。
--
-- sys_config 无 (tenant_id, config_key) 唯一索引,故先删后插,避免重复。
-- 种子 SQL 仍处于实测阶段,业务基准向预演看齐;运行代码遵从生产版本。
-- 执行顺序:01-08 之后;可重复执行。
-- ============================================
SET NAMES utf8mb4;
USE `db_iotlcm`;
START TRANSACTION;
-- 模板校验同时要求:启用、非超管、is_pass=1、data_scope=4、机构有效,
-- created_dept 为 0/NULL 或等于 dept_id,且菜单不能使用全部/自定义范围。
UPDATE `sys_role`
SET `created_dept` = `dept_id`, `status` = '0', `is_pass` = 1, `data_scope` = '4'
WHERE `tenant_id` = '000000' AND `role_id` = 2 AND `dept_id` = 1
AND `deleted_at` IS NULL;
DELETE FROM `sys_config`
WHERE `tenant_id` = '000000' AND `config_key` = 'agent.role.template.role_id';
INSERT INTO `sys_config`
(`tenant_id`,`config_name`,`config_key`,`config_value`,`config_type`,`created_dept`,`created_by`,`remark`)
VALUES
('000000','代理角色下发-平台模板角色ID','agent.role.template.role_id','2','Y',1,1,
'演示模板:dept 1 的现有 role 2;生产 cad19df 中代理机构仍需本级唯一 is_pass=1 角色');
-- 只处理已存在、已绑定的演示一级代理角色;不恢复或新建已删除的角色。
UPDATE `sys_role` r
JOIN `sys_dept` d ON d.`tenant_id` = r.`tenant_id`
AND d.`dept_id` = r.`dept_id` AND d.`dept_role` = r.`role_id`
SET r.`is_pass` = 1
WHERE r.`tenant_id` = '000000' AND r.`role_id` = 82 AND r.`dept_id` = 172
AND r.`deleted_at` IS NULL AND r.`status` = '0'
AND d.`deleted_at` IS NULL AND d.`status` = '0'
AND 0 = (
SELECT other_roles.n FROM (
SELECT COUNT(*) AS n FROM `sys_role`
WHERE `tenant_id` = '000000' AND `dept_id` = 172 AND `role_id` <> 82
AND `is_pass` = 1 AND `deleted_at` IS NULL
) other_roles
);
COMMIT;
-- 自检输出仅反映配置条件,不能代替页面创建下级的端到端验收。
SELECT COUNT(*) AS template_parameter_rows
FROM `sys_config`
WHERE `tenant_id` = '000000' AND `config_key` = 'agent.role.template.role_id';
SELECT `role_id`, `dept_id`, `status`, `is_pass`, `data_scope`, `created_dept`
FROM `sys_role` WHERE `tenant_id` = '000000' AND `role_id` IN (2,82)
AND `deleted_at` IS NULL;
SELECT d.`dept_id`, d.`dept_role`, COUNT(r.`role_id`) AS enabled_distribution_roles
FROM `sys_dept` d
LEFT JOIN `sys_role` r ON r.`tenant_id` = d.`tenant_id` AND r.`dept_id` = d.`dept_id`
AND r.`status` = '0' AND r.`is_pass` = 1 AND r.`deleted_at` IS NULL
WHERE d.`tenant_id` = '000000' AND d.`dept_id` = 172 AND d.`deleted_at` IS NULL
GROUP BY d.`dept_id`, d.`dept_role`;