Files
yunzerwebsiteallinone/go/docs/sql/create_auth_tenant_apply.sql
T
2026-10-08 15:30:37 +08:00

93 lines
5.9 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.
-- ============================================================
-- 注册企业绑定/创建申请(yz_auth_tenant_apply)+ 审核菜单
-- type=1 加入企业:注册第二步「绑定企业」,企业管理员在 backend 审批
-- type=2 创建企业:注册第二步「创建企业」,平台在 platform 审批,
-- 通过后自动建租户并把申请人绑定为租户管理员(不可更改)
-- 幂等脚本:重复执行不会产生重复数据。
-- 执行:mysql -h <host> -P <port> -u <user> -p <db> < create_auth_tenant_apply.sql
-- ============================================================
-- ---------- 1. 申请表 ----------
CREATE TABLE IF NOT EXISTS yz_auth_tenant_apply (
id bigint unsigned NOT NULL AUTO_INCREMENT,
identity_id bigint unsigned NOT NULL COMMENT '申请人统一身份ID(yz_auth_identity)',
type tinyint NOT NULL DEFAULT 1 COMMENT '1=加入企业 2=创建企业',
tid bigint unsigned NOT NULL DEFAULT 0 COMMENT '目标企业ID(type=1 有值;type=2 审核通过后回填)',
tenant_name varchar(128) NOT NULL DEFAULT '' COMMENT '企业名称(申请时快照)',
credit_code varchar(64) NOT NULL DEFAULT '' COMMENT '统一社会信用代码(type=2)',
legal_person varchar(64) NOT NULL DEFAULT '' COMMENT '法定代表人姓名(type=2)',
license_file varchar(500) NOT NULL DEFAULT '' COMMENT '营业执照文件URL,pdf/jpg/png(type=2)',
contact_person varchar(64) NOT NULL DEFAULT '' COMMENT '联系人',
contact_phone varchar(20) NOT NULL DEFAULT '' COMMENT '联系电话',
contact_email varchar(128) NOT NULL DEFAULT '' COMMENT '电子邮箱',
address varchar(255) NOT NULL DEFAULT '' COMMENT '公司地址',
status tinyint NOT NULL DEFAULT 0 COMMENT '0=待审核 1=已通过 2=已驳回',
reject_reason varchar(255) NOT NULL DEFAULT '' COMMENT '驳回原因',
reviewer_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '审核人ID(backend=租户用户uid / platform=平台管理员id)',
reviewer_name varchar(64) NOT NULL DEFAULT '' COMMENT '审核人姓名',
review_time datetime NULL COMMENT '审核时间',
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time datetime NULL COMMENT '更新时间',
delete_time datetime NULL COMMENT '软删时间',
PRIMARY KEY (id),
KEY idx_apply_identity (identity_id),
KEY idx_apply_tid (tid),
KEY idx_apply_status (status, type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='注册时加入企业/创建企业申请';
-- ---------- 2. backend 菜单:基础设置 → 加入申请 ----------
-- 注意:用户变量在 SELECT 列表赋值后于同语句 WHERE 中引用不可靠,改用派生表
INSERT INTO yz_system_menu
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
SELECT bs.id, '加入申请', '/basicSettings/applies', 'basicSettings/applies/index.vue',
'Bell', 90, 1, 1, '[2]', 2, 'system', '企业管理员审批注册用户提交的「绑定企业」申请'
FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings' AND delete_time IS NULL LIMIT 1) bs
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings/applies' AND delete_time IS NULL) x);
-- 找不到基础设置目录时退化为 backend 顶级菜单
INSERT INTO yz_system_menu
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
SELECT 0, '加入申请', '/basicSettings/applies', 'basicSettings/applies/index.vue',
'Bell', 90, 1, 1, '[2]', 2, 'system', '企业管理员审批注册用户提交的「绑定企业」申请'
FROM DUAL
WHERE (SELECT id FROM yz_system_menu WHERE path = '/basicSettings' AND delete_time IS NULL LIMIT 1) IS NULL
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings/applies' AND delete_time IS NULL) x);
-- ---------- 3. platform 菜单:企业创建审核(顶级) ----------
INSERT INTO yz_system_menu
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
SELECT 0, '企业创建审核', '/tenantApply', 'tenantApply/index.vue',
'OfficeBuilding', 21, 1, 1, '[1]', 2, 'system', '平台审批注册用户提交的「创建企业」申请,通过后自动建租户'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/tenantApply' AND delete_time IS NULL) x);
-- ---------- 4. 把「加入申请」菜单加入全局「租户管理员」角色 rights ----------
-- rights 兼容 JSON 数组与逗号分隔两种格式;rights 为空表示全权限,无需处理
SET @apply_menu_id := (
SELECT id FROM yz_system_menu WHERE path = '/basicSettings/applies' AND delete_time IS NULL LIMIT 1
);
-- 逗号分隔格式:追加
UPDATE yz_system_admin_role
SET rights = CONCAT(TRIM(TRAILING ',' FROM TRIM(BOTH ' ' FROM rights)), ',', @apply_menu_id)
WHERE cid = 2 AND tenant_id = 0 AND name = '租户管理员' AND delete_time IS NULL
AND @apply_menu_id IS NOT NULL
AND rights IS NOT NULL AND TRIM(rights) <> '' AND TRIM(rights) NOT LIKE '[%'
AND NOT FIND_IN_SET(@apply_menu_id, REPLACE(REPLACE(REPLACE(rights, '[', ''), ']', ''), ' ', ''));
-- JSON 数组格式:末尾插入
UPDATE yz_system_admin_role
SET rights = CONCAT(SUBSTRING(TRIM(rights), 1, LENGTH(TRIM(rights)) - 1), ',', @apply_menu_id, ']')
WHERE cid = 2 AND tenant_id = 0 AND name = '租户管理员' AND delete_time IS NULL
AND @apply_menu_id IS NOT NULL
AND TRIM(rights) LIKE '[%' AND TRIM(rights) LIKE '%]'
AND NOT FIND_IN_SET(@apply_menu_id, REPLACE(REPLACE(REPLACE(rights, '[', ''), ']', ''), ' ', ''));
-- ---------- 结果校验 ----------
SELECT id, pid, title, path, component_path, views, type
FROM yz_system_menu
WHERE delete_time IS NULL AND path IN ('/basicSettings/applies', '/tenantApply');
SELECT id, cid, tenant_id, name, rights FROM yz_system_admin_role
WHERE cid = 2 AND tenant_id = 0 AND name = '租户管理员' AND delete_time IS NULL;