@@ -36,10 +36,29 @@ def discover_docs() -> dict:
|
||||
"filename": filename,
|
||||
"sort_order": len(perms),
|
||||
"permissions": {
|
||||
"engineer": {"view": False, "edit": False, "cancel": False}
|
||||
"engineer": {"view": False, "edit": False, "cancel": False},
|
||||
"technician": {"view": False},
|
||||
},
|
||||
}
|
||||
save_permissions(perms)
|
||||
# migrate existing entries missing technician key
|
||||
changed = False
|
||||
for slug, doc in perms.items():
|
||||
if "permissions" not in doc:
|
||||
doc["permissions"] = {}
|
||||
perms_doc = doc["permissions"]
|
||||
if "technician" not in perms_doc:
|
||||
perms_doc["technician"] = {"view": False}
|
||||
changed = True
|
||||
# ensure engineer has edit/cancel defaults
|
||||
eng = perms_doc.setdefault("engineer", {})
|
||||
if "edit" not in eng:
|
||||
eng["edit"] = False
|
||||
changed = True
|
||||
if "cancel" not in eng:
|
||||
eng["cancel"] = False
|
||||
changed = True
|
||||
if changed:
|
||||
save_permissions(perms)
|
||||
return perms
|
||||
|
||||
|
||||
@@ -52,14 +71,21 @@ def get_allowed_docs(role: str) -> list[dict]:
|
||||
doc for doc in perms.values()
|
||||
if doc.get("permissions", {}).get("engineer", {}).get("view", False)
|
||||
]
|
||||
if role == "technician":
|
||||
return [
|
||||
doc for doc in perms.values()
|
||||
if doc.get("permissions", {}).get("technician", {}).get("view", False)
|
||||
]
|
||||
return []
|
||||
|
||||
|
||||
def can_access_doc(role: str, slug: str, action: str = "view") -> bool:
|
||||
if role == "owner":
|
||||
return True
|
||||
perms = load_permissions()
|
||||
doc = perms.get(slug, {})
|
||||
if role == "engineer":
|
||||
perms = load_permissions()
|
||||
doc = perms.get(slug, {})
|
||||
return doc.get("permissions", {}).get("engineer", {}).get(action, False)
|
||||
if role == "technician":
|
||||
return doc.get("permissions", {}).get("technician", {}).get("view", False)
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user