diff --git a/front/app/_orgs/[orgslug]/settings/layout.tsx b/front/app/_orgs/[orgslug]/settings/layout.tsx index 639f0461..1e8ec138 100644 --- a/front/app/_orgs/[orgslug]/settings/layout.tsx +++ b/front/app/_orgs/[orgslug]/settings/layout.tsx @@ -24,6 +24,11 @@ function SettingsLayout({ children, params }: { children: React.ReactNode, param
  • Profile
  • Passwords
  • + Organization + diff --git a/src/services/mocks/initial.py b/src/services/mocks/initial.py index 0e91f423..dfbed6da 100644 --- a/src/services/mocks/initial.py +++ b/src/services/mocks/initial.py @@ -10,7 +10,7 @@ from src.services.courses.thumbnails import upload_thumbnail from src.services.users import PublicUser, User, UserInDB, UserWithPassword from src.services.orgs import OrganizationInDB, Organization, create_org -from src.services.roles import Permission, Elements, create_role +from src.services.roles import Permission, Elements, RolePolicy, create_role from src.services.users import create_user from src.services.courses.courses import Course, CourseInDB, create_course from src.services.roles import Role @@ -87,11 +87,14 @@ async def create_initial_data(request: Request): database_roles = request.app.db["roles"] await database_roles.delete_many({}) + + + roles = [] admin_role = Role( name="admin", description="admin", - permissions=Permission( + policies=[RolePolicy(permissions=Permission( action_create=True, action_read=True, action_update=True, @@ -105,7 +108,7 @@ async def create_initial_data(request: Request): organizations=["*"], coursechapters=["*"], lectures=["*"], - ), + ))], linked_users=[admin_user.user_id], ) roles.append(admin_role) diff --git a/src/services/roles.py b/src/services/roles.py index eb170627..2423392d 100644 --- a/src/services/roles.py +++ b/src/services/roles.py @@ -28,14 +28,16 @@ class Elements(BaseModel): lectures : List[str] +class RolePolicy(BaseModel): + permissions: Permission + elements: Elements + class Role(BaseModel): name: str description: str - permissions: Permission - elements: Elements + policies: List[RolePolicy] linked_users: List[str] - class RoleInDB(Role): role_id: str creationDate: str diff --git a/src/services/security.py b/src/services/security.py index 57b9583b..0b5efafc 100644 --- a/src/services/security.py +++ b/src/services/security.py @@ -46,14 +46,15 @@ async def verify_user_rights_with_roles(request: Request,action: str, user_id: s user_roles.append(role) for role in user_roles: - element = role["elements"][await check_element_type(element_id)] - permission_state = role["permissions"][f'action_{action}'] + for policy in role['policies']: + element = policy["elements"][await check_element_type(element_id)] + permission_state = policy["permissions"][f'action_{action}'] - ## - if ("*" in element or element_id in element) and (permission_state is True): - return True - else: - return False + ## + if ("*" in element or element_id in element) and (permission_state is True): + return True + else: + return False async def check_element_type(element_id):