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):