#!/usr/bin/env python3 # -*- coding: utf-8 -*- """drag 模块 RBAC 权限注册(显式路径,禁止通配符)。 角色分层: - any: 静态 JS/CSS(drag-canvas.js / drag-editor.js / drag.css) - logined: .ui 页面与 /api/*.dspy 接口(画布/模板/编译/校验/发布) 按 per-module RBAC 模式调用 set_role_perm.py,同时注册目录路径与文件路径。 """ import os import sys def find_sage_root(): candidates = [ os.path.expanduser('~/repos/sage'), os.path.expanduser('~/sage'), '/d/scense/scense_app', ] for c in candidates: if os.path.isdir(os.path.join(c, 'wwwroot')): return c return None def main(): sage = find_sage_root() script_dir = os.path.dirname(os.path.abspath(__file__)) mod = 'scense_drag' if sage: sys.path.insert(0, sage) try: from set_role_perm import set_role_perm except Exception as e: print('[drag] 无法导入 set_role_perm: %s(尝试直接调用)' % e) set_role_perm = None else: print('[drag] 未找到 Sage 根目录,仅打印待注册路径') set_role_perm = None # any 角色:静态资源 any_paths = [ '/scense_drag/drag-canvas.js', '/scense_drag/drag-editor.js', '/scense_drag/drag.css', ] # logined 角色:页面与接口 logined_paths = [ '/scense_drag/index.ui', '/scense_drag/editor.ui', '/scense_drag/api/block_defs.dspy', '/scense_drag/api/graph_save.dspy', '/scense_drag/api/graph_list.dspy', '/scense_drag/api/graph_get.dspy', '/scense_drag/api/graph_delete.dspy', '/scense_drag/api/graph_compile.dspy', '/scense_drag/api/graph_validate.dspy', '/scense_drag/api/graph_publish.dspy', '/scense_drag/api/template_save.dspy', '/scense_drag/api/template_list.dspy', '/scense_drag/api/template_delete.dspy', '/scense_drag/api/template_use.dspy', '/scense_drag/api/get_search_entity.dspy', '/scense_drag/api/get_search_drag_status.dspy', '/scense_drag/api/get_search_template_category.dspy', # CRUD 子目录(xls2ui 生成,注册目录+文件) '/scense_drag/drag_graph', '/scense_drag/drag_graph/index.ui', '/scense_drag/drag_graph/get_drag_graph.dspy', '/scense_drag/drag_graph/add_drag_graph.dspy', '/scense_drag/drag_graph/update_drag_graph.dspy', '/scense_drag/drag_graph/delete_drag_graph.dspy', '/scense_drag/drag_template', '/scense_drag/drag_template/index.ui', '/scense_drag/drag_template/get_drag_template.dspy', '/scense_drag/drag_template/add_drag_template.dspy', '/scense_drag/drag_template/update_drag_template.dspy', '/scense_drag/drag_template/delete_drag_template.dspy', ] for p in any_paths: if set_role_perm: set_role_perm(p, 'any') else: print('any %s' % p) for p in logined_paths: if set_role_perm: set_role_perm(p, 'logined') else: print('logined %s' % p) print('[drag] load_path done. 若未找到 Sage 根,请手工在中心 load_path.py 添加以上路径。') if __name__ == '__main__': main()