Inplement user Roles

This commit is contained in:
Sebastiaan
2025-05-26 00:35:30 +02:00
parent 46610c6cbd
commit 2ce051a5f3
13 changed files with 397 additions and 35 deletions

View File

@@ -5,7 +5,7 @@ from fastapi import APIRouter, Depends, HTTPException
from fastapi.responses import HTMLResponse
from fastapi.security import OAuth2PasswordRequestForm
from app.api.deps import CurrentUser, SessionDep, get_current_active_superuser
from app.api.deps import CurrentUser, SessionDep, get_current_system_admin
from app.core import security
from app.core.config import settings
from app.core.security import get_password_hash
@@ -100,7 +100,7 @@ def reset_password(session: SessionDep, body: NewPassword) -> Message:
@router.post(
"/password-recovery-html-content/{email}",
dependencies=[Depends(get_current_active_superuser)],
dependencies=[Depends(get_current_system_admin)],
response_class=HTMLResponse,
)
def recover_password_html_content(email: str, session: SessionDep) -> Any:

View File

@@ -7,7 +7,7 @@ from sqlmodel import col, delete, func, select
from app.api.deps import (
CurrentUser,
SessionDep,
get_current_active_superuser,
get_current_system_admin,
)
from app.core.config import settings
from app.core.security import get_password_hash, verify_password
@@ -21,6 +21,9 @@ from app.models.user import (
UsersPublic,
UserUpdate,
UserUpdateMe,
PermissionModule,
PermissionPart,
PermissionRight,
)
from app.utils import generate_new_account_email, send_email
@@ -29,7 +32,7 @@ router = APIRouter(prefix="/users", tags=["users"])
@router.get(
"/",
dependencies=[Depends(get_current_active_superuser)],
dependencies=[Depends(get_current_system_admin)],
response_model=UsersPublic,
)
def read_users(session: SessionDep, skip: int = 0, limit: int = 100) -> Any:
@@ -47,7 +50,7 @@ def read_users(session: SessionDep, skip: int = 0, limit: int = 100) -> Any:
@router.post(
"/", dependencies=[Depends(get_current_active_superuser)], response_model=UserPublic
"/", dependencies=[Depends(get_current_system_admin)], response_model=UserPublic
)
def create_user(*, session: SessionDep, user_in: UserCreate) -> Any:
"""
@@ -128,7 +131,11 @@ def delete_user_me(session: SessionDep, current_user: CurrentUser) -> Any:
"""
Delete own user.
"""
if current_user.is_superuser:
if current_user.has_permission(
module=PermissionModule.SYSTEM,
part=PermissionPart.ADMIN,
rights=PermissionRight.DELETE,
):
raise HTTPException(
status_code=403, detail="Super users are not allowed to delete themselves"
)
@@ -163,7 +170,7 @@ def read_user_by_id(
user = session.get(User, user_id)
if user == current_user:
return user
if not current_user.is_superuser:
if not current_user.has_permission(module=PermissionModule.USER, part=PermissionPart.ADMIN, rights=PermissionRight.READ):
raise HTTPException(
status_code=403,
detail="The user doesn't have enough privileges",
@@ -173,7 +180,7 @@ def read_user_by_id(
@router.patch(
"/{user_id}",
dependencies=[Depends(get_current_active_superuser)],
dependencies=[Depends(get_current_system_admin)],
response_model=UserPublic,
)
def update_user(
@@ -203,7 +210,7 @@ def update_user(
return db_user
@router.delete("/{user_id}", dependencies=[Depends(get_current_active_superuser)])
@router.delete("/{user_id}", dependencies=[Depends(get_current_system_admin)])
def delete_user(
session: SessionDep, current_user: CurrentUser, user_id: uuid.UUID
) -> Message:

View File

@@ -1,7 +1,7 @@
from fastapi import APIRouter, Depends
from pydantic.networks import EmailStr
from app.api.deps import get_current_active_superuser
from app.api.deps import get_current_system_admin
from app.models.base import Message
from app.utils import generate_test_email, send_email
@@ -10,7 +10,7 @@ router = APIRouter(prefix="/utils", tags=["utils"])
@router.post(
"/test-email/",
dependencies=[Depends(get_current_active_superuser)],
dependencies=[Depends(get_current_system_admin)],
status_code=201,
)
def test_email(email_to: EmailStr) -> Message: