101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from typing import List
|
|
from app.models.auth.module_model import Module
|
|
from app.models.auth.access_model import Access
|
|
from app.models.auth.module_access_model import ModuleAccess
|
|
import uuid
|
|
from app.config.database import get_db
|
|
from app.services.auth.module_permission_service import ModulePermissionService
|
|
from app.middleware.auth_middleware import get_current_user, require_access, User
|
|
from app.schemas.auth.module_schema import ModuleCreate, ModuleUpdate, ModuleResponse
|
|
from app.controllers.auth.module_controller import ModuleController
|
|
|
|
router = APIRouter()
|
|
|
|
@router.get("/", response_model=List[ModuleResponse])
|
|
def list_modules(
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("modules.view")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
return ModuleController.list_modules(db)
|
|
|
|
@router.post("/", response_model=ModuleResponse)
|
|
def create_module(
|
|
module_data: ModuleCreate,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("modules.manage")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
return ModuleController.create_module(db, module_data)
|
|
|
|
@router.get("/{module_id}", response_model=ModuleResponse)
|
|
def get_module(
|
|
module_id: str,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("modules.view")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
return ModuleController.get_module(db, module_id)
|
|
|
|
@router.put("/{module_id}", response_model=ModuleResponse)
|
|
def update_module(
|
|
module_id: str,
|
|
module_data: ModuleUpdate,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("modules.manage")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
return ModuleController.update_module(db, module_id, module_data)
|
|
|
|
@router.delete("/{module_id}")
|
|
def delete_module(
|
|
module_id: str,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("modules.manage")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
return ModuleController.delete_module(db, module_id)
|
|
|
|
@router.get("/{module_id}/permissions", response_model=List[dict])
|
|
def get_module_permissions(
|
|
module_id: str,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("modules.view")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
|
|
module = db.query(Module).filter(Module.id == uuid.UUID(module_id)).first()
|
|
if not module:
|
|
raise HTTPException(status_code=404, detail="Module not found")
|
|
|
|
permissions = db.query(ModuleAccess).filter(
|
|
ModuleAccess.module_id == module.id
|
|
).all()
|
|
|
|
return [{
|
|
"id": str(p.id),
|
|
"access_code": p.access_code,
|
|
"name": p.name,
|
|
"category": p.category,
|
|
"parent_id": str(p.parent_id) if p.parent_id else None,
|
|
"scope": "module",
|
|
"module_id": str(p.module_id)
|
|
} for p in permissions]
|
|
|
|
@router.post("/{module_id}/permissions/sync")
|
|
def sync_module_permissions(
|
|
module_id: str,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("modules.manage")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
|
|
try:
|
|
result = ModulePermissionService.sync_permissions(db, module_id)
|
|
return result
|
|
except Exception as e:
|
|
if isinstance(e, HTTPException):
|
|
raise e
|
|
raise HTTPException(status_code=500, detail=f"Permission sync failed: {str(e)}") |