feat: add role-based sidebar link visibility control
Deploy Dashboard (Dev) / deploy-dev (push) Successful in 1m37s
Deploy Dashboard (Dev) / deploy-dev (push) Successful in 1m37s
This commit is contained in:
@@ -156,6 +156,7 @@ async def read_users_me(current_user = Depends(auth.get_current_user)):
|
||||
"username": current_user.username,
|
||||
"role": current_user.role,
|
||||
"pages": current_user.pages,
|
||||
"sidebar_links": current_user.sidebar_links,
|
||||
"has_2fa": bool(totp_secret),
|
||||
}
|
||||
|
||||
@@ -411,11 +412,17 @@ async def rbac_update_role(role: str, request: Request, current_user = Depends(a
|
||||
from rbac import load_rbac, save_rbac
|
||||
body = await request.json()
|
||||
pages = body.get("pages")
|
||||
sidebar_links = body.get("sidebar_links")
|
||||
if pages is None:
|
||||
raise HTTPException(status_code=400, detail="Missing pages field")
|
||||
if pages != "*" and not isinstance(pages, list):
|
||||
raise HTTPException(status_code=400, detail="pages must be '*' or a list")
|
||||
if sidebar_links is not None and sidebar_links != "*" and not isinstance(sidebar_links, list):
|
||||
raise HTTPException(status_code=400, detail="sidebar_links must be '*' or a list")
|
||||
rbac = load_rbac()
|
||||
rbac.setdefault("role_defaults", {})[role] = {"pages": pages}
|
||||
role_config = {"pages": pages}
|
||||
if sidebar_links is not None:
|
||||
role_config["sidebar_links"] = sidebar_links
|
||||
rbac.setdefault("role_defaults", {})[role] = role_config
|
||||
save_rbac(rbac)
|
||||
return {"ok": True}
|
||||
|
||||
Reference in New Issue
Block a user