memleketmeselesi/mm_api/routers/permissions.py
Mukan Erkin 2498e75594 init: memleketmeselesi platform — API + migrations
FastAPI + PostgreSQL 16. KYC, issue sistemi, permission/group yönetimi,
session yönetimi, API client auth (kışla kapısı), officials/persons CRUD.
Migration 0001–0013 dahil.
2026-04-27 23:06:59 +03:00

101 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from fastapi import APIRouter, Depends, HTTPException
from psycopg import AsyncConnection
from mm_api.db import get_conn
from mm_api.dependencies import current_user
from mm_api.models.permission import PermissionGroupCreate, GroupPermissionAssign, UserGroupAssign
import mm_api.services.permission as svc
router = APIRouter(tags=["permissions"])
@router.get("/permissions")
async def list_permissions(conn: AsyncConnection = Depends(get_conn)):
return await svc.list_permissions(conn)
@router.get("/permission-groups")
async def list_groups(conn: AsyncConnection = Depends(get_conn)):
return await svc.list_groups(conn)
@router.get("/permission-groups/{group_id}")
async def get_group(group_id: int, conn: AsyncConnection = Depends(get_conn)):
group = await svc.get_group(conn, group_id)
if not group:
raise HTTPException(404, "Grup bulunamadı")
return group
@router.post("/permission-groups", status_code=201)
async def create_group(
data: PermissionGroupCreate,
user: dict = Depends(current_user),
conn: AsyncConnection = Depends(get_conn),
):
if not await svc.can(conn, user["id"], "create", "user"):
raise HTTPException(403, "Yetersiz yetki")
return await svc.create_group(conn, data)
@router.put("/permission-groups/{group_id}/permissions")
async def set_group_permissions(
group_id: int,
data: GroupPermissionAssign,
user: dict = Depends(current_user),
conn: AsyncConnection = Depends(get_conn),
):
if not await svc.can(conn, user["id"], "assign_group", "user"):
raise HTTPException(403, "Yetersiz yetki")
group = await svc.get_group(conn, group_id)
if not group:
raise HTTPException(404, "Grup bulunamadı")
await svc.set_group_permissions(conn, group_id, data)
return await svc.group_permissions(conn, group_id)
@router.get("/permission-groups/{group_id}/permissions")
async def get_group_permissions(group_id: int, conn: AsyncConnection = Depends(get_conn)):
return await svc.group_permissions(conn, group_id)
@router.post("/user-groups")
async def assign_user_to_group(
data: UserGroupAssign,
user: dict = Depends(current_user),
conn: AsyncConnection = Depends(get_conn),
):
if not await svc.can(conn, user["id"], "assign_group", "user"):
raise HTTPException(403, "Yetersiz yetki")
await svc.assign_user_to_group(conn, data, granted_by=user["id"])
return {"ok": True}
@router.delete("/user-groups/{user_id}/{group_id}")
async def remove_user_from_group(
user_id: int,
group_id: int,
user: dict = Depends(current_user),
conn: AsyncConnection = Depends(get_conn),
):
if not await svc.can(conn, user["id"], "assign_group", "user"):
raise HTTPException(403, "Yetersiz yetki")
await svc.remove_user_from_group(conn, user_id, group_id)
return {"ok": True}
@router.get("/users/{user_id}/groups")
async def get_user_groups(
user_id: int,
user: dict = Depends(current_user),
conn: AsyncConnection = Depends(get_conn),
):
return await svc.user_groups(conn, user_id)
@router.get("/users/{user_id}/permissions")
async def get_user_permissions(
user_id: int,
user: dict = Depends(current_user),
conn: AsyncConnection = Depends(get_conn),
):
return await svc.user_permissions(conn, user_id)