feat(M11b-3/4): pbl_runtime_ext 8 条广播/轮询端点权限种子导入器 + 幂等 SQL(响应 QC #17/#18)
- init/rbac_seed.json: 8 条权限逐条显式登记(path/method/role/endpoint/milestone/traceability),无 % / * 通配符
- scripts/m11b34_rbac_seed.py: --check 离线三方一致性 / --emit-sql 幂等 SQL / --apply 连库 upsert + 库内回查
- QC #18-1: docstring 删去不存在的 dbname 兜底 'pbl' 与 $PBL_DBNAME 一级,改述为三级来源均缺即 FAIL(与 resolve_dbname 一致)
- QC #18-2: --apply 库内回查改为直接参数化 LIKE %s,去掉 ${p}$ replace 造占位符技巧
- QC #17: 模块仓选择性 git add 本地 commit 收口(禁 git add -A,生成目录/.venv/.rtx5tmp/egg-info 已在 .gitignore)
- sql/m11b34_rbac_seed.sql: 8 permission + 8 rolepermission 幂等 SQL,交 apps/pbls build.sh 第 9 步 import_rp
- 验证: py_compile OK; --check rc=0 errors=0; check_paths ok=True; 沙箱 --apply rc=2(1044 无库权限,不冒充成功)
This commit is contained in:
parent
dbd7169f5e
commit
e141be2b9d
@ -15,15 +15,17 @@ references/endpoint-registration.md / sqlor-database-module):
|
||||
information_schema 读取,只写交集列;缺关键列直接 FAIL 而非静默跳过。
|
||||
4. **幂等**:permission 按 path 查重(存在则 UPDATE 非键列),rolepermission 按
|
||||
(roleid, permid) 查重;id 用 `md5` 派生的稳定 32 位串,重复执行零差异。
|
||||
5. **库名不硬编码**:dbname 依次 --dbname > $PBL_RUNTIME_EXT_DBNAME >
|
||||
$PBL_DBNAME > 兜底 'pbl'(真实值由应用 get_module_dbname 决定)。
|
||||
5. **库名不硬编码**:dbname 依次取 --dbname > $PBL_RUNTIME_EXT_DBNAME >
|
||||
应用 conf/config.json 的 module_dbname 映射(真实值由应用 get_module_dbname
|
||||
决定)。**三级来源均缺 → 直接 FAIL 退出,不猜库名、无 'pbl' 兜底**
|
||||
(与 resolve_dbname() 实现一致:解析不到即返回 (None, 'unresolved'))。
|
||||
|
||||
真实表结构(rbac,见 modules/scense/scripts/ddl.sql 实测 DDL):
|
||||
permission(id, name, description, ptype, parentid, path, title, icon)
|
||||
rolepermission(id, roleid, permid)
|
||||
|
||||
用法:
|
||||
python3 scripts/m11b34_rbac_seed.py --check # 离线校验,不连库
|
||||
python3 scripts/m11b34_rbac_seed.py --check # 离线校验,不连库(rc=0 即 errors=0)
|
||||
python3 scripts/m11b34_rbac_seed.py --emit-sql x.sql # 出 SQL 交 build.sh 第 9 步
|
||||
python3 scripts/m11b34_rbac_seed.py --apply # 连库幂等导入
|
||||
"""
|
||||
@ -359,8 +361,8 @@ def main():
|
||||
stats = upsert(cur, 'permission', use_perm, [r for _, r in perm_rows], 'path', stats)
|
||||
stats = upsert(cur, 'rolepermission', use_rp, rp_rows, 'id', stats)
|
||||
conn.commit()
|
||||
cur.execute("SELECT COUNT(1) FROM `permission` WHERE `path` LIKE ${p}$".replace(
|
||||
'${p}$', '%s'), ('/%s/api/%%' % MODULE,))
|
||||
cur.execute("SELECT COUNT(1) FROM `permission` WHERE `path` LIKE %s",
|
||||
('/%s/api/%%' % MODULE,))
|
||||
stats['verify_permission_in_db'] = cur.fetchone()[0]
|
||||
cur.execute("SELECT COUNT(1) FROM `rolepermission` rp JOIN `permission` p "
|
||||
"ON rp.permid = p.id WHERE p.path LIKE %s", ('/%s/api/%%' % MODULE,))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user