First commit
This commit is contained in:
37
src/app/graphql/resolvers/user_resolver.py
Normal file
37
src/app/graphql/resolvers/user_resolver.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import strawberry
|
||||
from strawberry import Info
|
||||
from app.core.exceptions import AuthZException, NotFoundBLLException
|
||||
# Par simplification, nos resolvers consomment directement la couche DAL, mais dans une vraie application, il faudrait passer par une couche BLL (Services).
|
||||
from app.repositories import fake_db_repo
|
||||
from app.graphql.resolvers.auth_helper import get_current_user_from_info
|
||||
from app.models.notemodel import NoteModel
|
||||
from app.models.usermodel import UserModel
|
||||
|
||||
async def get_user_by_id(info: Info, id: strawberry.ID) -> UserModel:
|
||||
""" Resolver pour le champ 'user(id: ID!)'. """
|
||||
# TODO 2.2: Récupérer le current_user (get_current_user_from_info)
|
||||
|
||||
user_to_view = await fake_db_repo.get_user_by_id(int(id))
|
||||
|
||||
if not user_to_view:
|
||||
raise NotFoundBLLException(resource_name="User", resource_id=id)
|
||||
|
||||
# TODO 2.2: Implémenter le contrôle d'accès (A01)
|
||||
# Règle : admin OU 'is_self'
|
||||
# Lever AuthZException si l'accès est refusé
|
||||
|
||||
return user_to_view
|
||||
|
||||
|
||||
async def get_note_owner_resolver(root: NoteModel, info: Info) -> UserModel:
|
||||
""" Resolver pour le champ imbriqué 'Note.owner'. """
|
||||
# 'root' est l'objet 'Note' parent
|
||||
owner = await fake_db_repo.get_user_by_id(root.owner_id)
|
||||
if not owner:
|
||||
raise NotFoundBLLException(resource_name="User", resource_id=root.owner_id)
|
||||
|
||||
# TODO 2.3: (Défense en profondeur)
|
||||
# Problème : 'owner' contient des champs sensibles (email).
|
||||
# Retourner un UserModel, mais avec l'email masqué (ex: "[Redacted]").
|
||||
|
||||
return owner # INSECURE: retourne l'objet complet avec l'email
|
||||
Reference in New Issue
Block a user