| 1 |
- {"nodes": [{"id": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "label": "menu_guard.py", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L1"}, {"id": "core_menu_guard_require_admin_or_super_admin", "label": "require_admin_or_super_admin()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L14"}, {"id": "core_menu_guard_get_user_menu_codes", "label": "get_user_menu_codes()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L22"}, {"id": "core_menu_guard_require_menu_code", "label": "require_menu_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L27"}, {"id": "core_menu_guard_require_any_menu_code", "label": "require_any_menu_code()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L33"}, {"id": "core_menu_guard_rationale_1", "label": "\u83dc\u5355 code \u6743\u9650\u5b88\u536b\uff08V0.3\uff1a\u901a\u8fc7 sys_user_role \u2192 sys_role_menu \u2192 sys_menu.perms\uff09", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L1"}, {"id": "core_menu_guard_rationale_15", "label": "\u8fd0\u8425\u7aef\u89d2\u8272\u5b88\u536b\uff1aadmin / super_admin \u53ef\u8bbf\u95ee\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L15"}, {"id": "core_menu_guard_rationale_23", "label": "\u8bfb\u53d6\u7528\u6237\u6388\u6743\u7684\u83dc\u5355\u6743\u9650\u6807\u8bc6\u96c6\u5408\uff08\u4e0e\u524d\u7aef meta.menuCode / perms \u5bf9\u9f50\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L23"}, {"id": "core_menu_guard_rationale_28", "label": "\u63a5\u53e3\u83dc\u5355\u6743\u9650\u5b88\u536b\uff08\u5df2\u7edf\u4e00\u653e\u884c menuCode \u6821\u9a8c\uff0c\u4ec5\u4fdd\u7559\u8fd0\u8425\u7aef\u767b\u5f55\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L28"}, {"id": "core_menu_guard_rationale_34", "label": "\u63a5\u53e3\u83dc\u5355\u6743\u9650\u5b88\u536b\uff08\u5df2\u7edf\u4e00\u653e\u884c menuCode \u6821\u9a8c\uff0c\u4ec5\u4fdd\u7559\u8fd0\u8425\u7aef\u767b\u5f55\uff09\u3002", "file_type": "rationale", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L34"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "target": "app_core_auth", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "target": "app_services_web_auth_roles", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "target": "core_menu_guard_require_admin_or_super_admin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "target": "core_menu_guard_get_user_menu_codes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L22", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "target": "core_menu_guard_require_menu_code", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L27", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "target": "core_menu_guard_require_any_menu_code", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L33", "weight": 1.0}, {"source": "core_menu_guard_rationale_1", "target": "users_wuzilong_work_00code_zkxw_backend_app_core_menu_guard_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L1", "weight": 1.0}, {"source": "core_menu_guard_rationale_15", "target": "core_menu_guard_require_admin_or_super_admin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L15", "weight": 1.0}, {"source": "core_menu_guard_rationale_23", "target": "core_menu_guard_get_user_menu_codes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L23", "weight": 1.0}, {"source": "core_menu_guard_rationale_28", "target": "core_menu_guard_require_menu_code", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L28", "weight": 1.0}, {"source": "core_menu_guard_rationale_34", "target": "core_menu_guard_require_any_menu_code", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L34", "weight": 1.0}], "raw_calls": [{"caller_nid": "core_menu_guard_require_admin_or_super_admin", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L16"}, {"caller_nid": "core_menu_guard_require_admin_or_super_admin", "callee": "HTTPException", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L18"}, {"caller_nid": "core_menu_guard_get_user_menu_codes", "callee": "iter_user_menu_perm_codes", "source_file": "/Users/wuzilong/work/00code/zkxw/backend/app/core/menu_guard.py", "source_location": "L24"}]}
|