From 597cef0c229ccd44fb33e47db6a23494443b1e9a Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Thu, 29 May 2025 15:13:11 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20is=5Fadmin=20attribute=20on?= =?UTF-8?q?=20User=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/token.py | 3 ++- app/models/user.py | 3 ++- app/routes/auth.py | 37 +++++++++++++++++++++++++----- app/serializers/user_serializer.py | 3 ++- app/stub.py | 6 +++-- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/app/models/token.py b/app/models/token.py index 673589c..9f3e26b 100644 --- a/app/models/token.py +++ b/app/models/token.py @@ -3,4 +3,5 @@ from pydantic import BaseModel class Token(BaseModel): access_token: str token_type: str - user_id: str \ No newline at end of file + user_id: str + is_admin: bool \ No newline at end of file diff --git a/app/models/user.py b/app/models/user.py index 9d14049..2a8e4c1 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -4,4 +4,5 @@ from pydantic import BaseModel, Field class User(BaseModel): uid: str = Field(..., alias="_id") username: str - password: str \ No newline at end of file + password: str + is_admin: bool = False \ No newline at end of file diff --git a/app/routes/auth.py b/app/routes/auth.py index b29c68e..e7ea1e7 100644 --- a/app/routes/auth.py +++ b/app/routes/auth.py @@ -34,12 +34,27 @@ async def register(user: UserRegisterDTO): ) hashed_password = get_password_hash(user.password) - user_id = users_collection.insert_one({"username": user.username, "password": hashed_password}) + user_id = users_collection.insert_one({ + "username": user.username, + "password": hashed_password, + "is_admin": False + }) access_token_expires = timedelta(minutes=config.ACCESS_TOKEN_EXPIRE_MINUTES) - access_token = create_access_token(data={"sub": user.username}, expires_delta=access_token_expires) + access_token = create_access_token( + data={ + "sub": user.username, + "is_admin": False + }, + expires_delta=access_token_expires + ) - return {"access_token": access_token, "token_type": "bearer", "user_id": str(user_id.inserted_id)} + return { + "access_token": access_token, + "token_type": "bearer", + "user_id": str(user_id.inserted_id), + "is_admin": False + } @auth_router.post( path="/login", @@ -56,10 +71,20 @@ async def login(form_data: OAuth2PasswordRequestForm = Depends()): ) access_token_expires = timedelta(minutes=config.ACCESS_TOKEN_EXPIRE_MINUTES) - access_token = create_access_token(data={"sub": form_data.username}, expires_delta=access_token_expires) - - return {"access_token": access_token, "token_type": "bearer", "user_id": str(user["_id"])} + access_token = create_access_token( + data={ + "sub": form_data.username, + "is_admin": user.get("is_admin", False) + }, + expires_delta=access_token_expires + ) + return { + "access_token": access_token, + "token_type": "bearer", + "user_id": str(user["_id"]), + "is_admin": user.get("is_admin", False) + } @auth_router.get( path="/logout", diff --git a/app/serializers/user_serializer.py b/app/serializers/user_serializer.py index 92ff23a..74f064b 100644 --- a/app/serializers/user_serializer.py +++ b/app/serializers/user_serializer.py @@ -15,5 +15,6 @@ def user_serialize(user) -> User: return User( _id=str(user['_id']), username=user['username'], - password=user['password'] + password=user['password'], + is_admin=user['is_admin'] ) \ No newline at end of file diff --git a/app/stub.py b/app/stub.py index 1ec0e2d..a248e2d 100644 --- a/app/stub.py +++ b/app/stub.py @@ -55,12 +55,14 @@ def populate_data(): # Créer les utilisateurs user1_id = users_collection.insert_one({ "username": "string", - "password": get_password_hash("string") + "password": get_password_hash("string"), + "is_admin": True }).inserted_id user2_id = users_collection.insert_one({ "username": "test", - "password": get_password_hash("test") + "password": get_password_hash("test"), + "is_admin": False }).inserted_id # Créer d'abord les pins