44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Request
|
|
from fastapi.responses import RedirectResponse
|
|
|
|
from app.core.db.common import CommonSessionLocal
|
|
from app.core.security.csrf import get_or_create_csrf_token
|
|
from app.core.security.session_auth import get_current_user
|
|
from app.core.templating import templates
|
|
from app.modules.core.rbac.deps import get_user_permissions, get_user_roles
|
|
from app.modules.workspace_navigation.service import build_workspace_cards, current_workspace_code
|
|
|
|
router = APIRouter(tags=["workspace-navigation-ui"])
|
|
|
|
|
|
@router.get("/workspaces")
|
|
def workspaces(request: Request):
|
|
db = CommonSessionLocal()
|
|
try:
|
|
current_user = get_current_user(request, db=db)
|
|
if not current_user:
|
|
return RedirectResponse(url="/login", status_code=303)
|
|
|
|
roles = get_user_roles(db, current_user.id)
|
|
permissions = get_user_permissions(db, current_user.id)
|
|
cards = build_workspace_cards(roles, permissions)
|
|
current_path = request.url.path
|
|
|
|
return templates.TemplateResponse(
|
|
"modules/workspace_navigation/templates/workspace_navigation/index.html",
|
|
{
|
|
"request": request,
|
|
"current_user": current_user,
|
|
"current_user_roles": roles,
|
|
"current_user_permissions": permissions,
|
|
"csrf_token": get_or_create_csrf_token(request),
|
|
"title": "My Workspaces",
|
|
"workspace_cards": cards,
|
|
"current_workspace_code": current_workspace_code(current_path),
|
|
},
|
|
)
|
|
finally:
|
|
db.close()
|