From a134316f7aeb132fd4d13102e87dc2e502b59b6c Mon Sep 17 00:00:00 2001 From: swve Date: Sun, 7 May 2023 18:19:36 +0000 Subject: [PATCH] feat: re-eng roles --- src/services/mocks/initial.py | 3 ++- src/services/orgs.py | 4 ++++ src/services/users/schemas/users.py | 10 ++++++++-- src/services/users/users.py | 4 ++-- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/services/mocks/initial.py b/src/services/mocks/initial.py index ea443c1d..f20e529e 100644 --- a/src/services/mocks/initial.py +++ b/src/services/mocks/initial.py @@ -9,6 +9,7 @@ from src.security.security import security_hash_password from src.services.courses.chapters import CourseChapter, create_coursechapter from src.services.courses.activities.activities import Activity, create_activity from src.services.courses.thumbnails import upload_thumbnail +from src.services.users.schemas.users import UserRolesInOrganization from src.services.users.users import PublicUser, User, UserInDB, UserWithPassword from src.services.orgs import OrganizationInDB, Organization, create_org @@ -36,7 +37,7 @@ async def create_initial_data(request: Request): user_id="user_admin", creation_date=str(datetime.now()), update_date=str(datetime.now()), - roles=["role_admin"], + roles= [], orgs=[], username=f"admin", email=f"admin@admin.admin", diff --git a/src/services/orgs.py b/src/services/orgs.py index 7934ff86..21ab93ab 100644 --- a/src/services/orgs.py +++ b/src/services/orgs.py @@ -87,6 +87,10 @@ async def create_org(request: Request, org_object: Organization, current_user: P # add org to user await user.update_one({"user_id": current_user.user_id}, { "$addToSet": {"orgs": user_organization.dict()}}) + + # add role admin to org + await user.update_one({"user_id": current_user.user_id}, { + "$addToSet": {"roles": {"org_id": org_id, "role_id": "role_admin"}}}) if not org_in_db: raise HTTPException( diff --git a/src/services/users/schemas/users.py b/src/services/users/schemas/users.py index 4dc33490..98075579 100644 --- a/src/services/users/schemas/users.py +++ b/src/services/users/schemas/users.py @@ -9,6 +9,12 @@ class UserOrganization(BaseModel): def __getitem__(self, item): return getattr(self, item) +class UserRolesInOrganization(BaseModel): + org_id: str + role_id: str + + def __getitem__(self, item): + return getattr(self, item) @@ -31,7 +37,7 @@ class UserInDB(User): verified: bool | None = False disabled: bool | None = False orgs: list[UserOrganization] = [] - roles: list[str] = [] + roles: list[UserRolesInOrganization] = [] creation_date: str update_date: str @@ -41,7 +47,7 @@ class UserInDB(User): class PublicUser(User): user_id: str orgs: list[UserOrganization] = [] - roles: list[str] = [] + roles: list[UserRolesInOrganization] = [] creation_date: str update_date: str diff --git a/src/services/users/users.py b/src/services/users/users.py index 87a90a7d..0f730a3e 100644 --- a/src/services/users/users.py +++ b/src/services/users/users.py @@ -4,7 +4,7 @@ from uuid import uuid4 from fastapi import HTTPException, Request, status from src.services.roles.schemas.roles import Role from src.security.security import security_hash_password, security_verify_password -from src.services.users.schemas.users import PasswordChangeForm, PublicUser, User, UserOrganization, UserWithPassword, UserInDB +from src.services.users.schemas.users import PasswordChangeForm, PublicUser, User, UserOrganization, UserRolesInOrganization, UserWithPassword, UserInDB async def create_user(request: Request, current_user: PublicUser | None, user_object: UserWithPassword, org_slug: str): @@ -52,7 +52,7 @@ async def create_user(request: Request, current_user: PublicUser | None, user_o orgs = [UserOrganization(org_id=org_id, org_role="member")] # Give role - roles = ["role_member"] + roles = [UserRolesInOrganization(role_id="role_member", org_id=org_id)] # Create the user user = UserInDB(user_id=user_id, creation_date=str(datetime.now()),