admin / Synapse-Cortex
publicSelf Hosted ITSM Tool with RBAC/Tenanting and MFA
Synapse-Cortex / Synapse-Cortexv2 / app / routers / meta.py
1715 B · main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | from typing import Optional from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from .. import models, schemas from ..database import get_db from ..deps import get_session_user router = APIRouter(prefix="/api/v1/meta", tags=["meta"]) @router.get("/agents", response_model=list[schemas.UserOut]) def list_agents(db: Session = Depends(get_db), user: Optional[models.User] = Depends(get_session_user)): """Assignable users (agent/tenant_admin/global_admin) for ticket assignment dropdowns - available to any authenticated tenant user, not admin-gated, since any role can create/assign a ticket.""" if not user: raise HTTPException(status.HTTP_401_UNAUTHORIZED) return ( db.query(models.User) .filter( models.User.tenant_id == user.tenant_id, models.User.role.in_( [models.UserRole.AGENT, models.UserRole.TENANT_ADMIN, models.UserRole.GLOBAL_ADMIN] ), ) .order_by(models.User.full_name) .all() ) @router.get("/asset-types", response_model=list[schemas.AssetTypeOptionOut]) def list_asset_types(db: Session = Depends(get_db), user: Optional[models.User] = Depends(get_session_user)): """Read-only asset type list for asset create/edit dropdowns - available to any authenticated tenant user. Admin CRUD over this list lives separately at /api/v1/admin/asset-types.""" if not user: raise HTTPException(status.HTTP_401_UNAUTHORIZED) return ( db.query(models.AssetTypeOption) .filter(models.AssetTypeOption.tenant_id == user.tenant_id) .order_by(models.AssetTypeOption.name) .all() ) |