@@ -66,6 +66,28 @@ def member_can_access_org(member_id, org_id):
6666 ).exists ()
6767
6868
69+ def role_has_permission (role , action , resource , is_app_resource = False ):
70+ """Check if a role has the specified permission for a resource."""
71+ if not role :
72+ return False # No role assigned, hence no permissions
73+
74+ # Check if the role is a default role
75+ if role .is_default :
76+ # Get permissions from the default_roles dictionary
77+ role_name = role .name .capitalize ()
78+ permissions = default_roles .get (role_name , {})
79+ else :
80+ # Use the permissions stored in the role object
81+ permissions = role .permissions
82+
83+ # Determine the correct key to check
84+ permission_key = "app_permissions" if is_app_resource else "permissions"
85+
86+ # Check if the resource exists and if the action is permitted
87+ resource_permissions = permissions .get (permission_key , {}).get (resource , [])
88+ return action in resource_permissions
89+
90+
6991def user_has_permission (
7092 account ,
7193 action ,
@@ -85,25 +107,8 @@ def user_has_permission(
85107 org_member = OrganisationMember .objects .get (
86108 user = account , organisation = organisation , deleted_at = None
87109 )
88- role = org_member .role
89- if not role :
90- return False # No role assigned, hence no permissions
91-
92- # Check if the role is a default role
93- if role .is_default :
94- # Get permissions from the default_roles dictionary
95- role_name = role .name .capitalize ()
96- permissions = default_roles .get (role_name , {})
97- else :
98- # Use the permissions stored in the role object
99- permissions = role .permissions
100-
101- # Determine the correct key to check
102- permission_key = "app_permissions" if is_app_resource else "permissions"
103110
104- # Check if the resource exists and if the action is permitted
105- resource_permissions = permissions .get (permission_key , {}).get (resource , [])
106- return action in resource_permissions
111+ return role_has_permission (org_member .role , action , resource , is_app_resource )
107112
108113 except OrganisationMember .DoesNotExist :
109114 return False # User is not a member of the organization
0 commit comments