1010from tracecat .audit .logger import audit_log
1111from tracecat .authz .controls import validate_scope_string
1212from tracecat .authz .enums import ScopeSource
13+ from tracecat .authz .scopes import PRESET_ROLE_SCOPES
1314from tracecat .db .models import (
1415 Group ,
1516 GroupMember ,
@@ -37,6 +38,9 @@ class RBACService(BaseOrgService):
3738 """Service for managing RBAC entities and computing effective scopes."""
3839
3940 service_name = "rbac"
41+ _PROTECTED_ROLE_SLUGS = frozenset (PRESET_ROLE_SCOPES ) | frozenset (
42+ {"admin" , "editor" , "viewer" }
43+ )
4044
4145 # =========================================================================
4246 # Scope Management
@@ -223,12 +227,12 @@ async def update_role(
223227 ) -> RoleModel :
224228 """Update a role.
225229
226- System roles (admin, editor, viewer) cannot have their scopes modified.
230+ Preset roles cannot have their scopes modified.
227231 """
228232 role = await self .get_role (role_id )
229233
230- # System roles cannot have scopes modified
231- if role .slug in { "admin" , "editor" , "viewer" } and scope_ids is not None :
234+ # Preset roles cannot have scopes modified
235+ if role .slug in self . _PROTECTED_ROLE_SLUGS and scope_ids is not None :
232236 raise TracecatAuthorizationError ("Cannot modify scopes of system roles" )
233237
234238 if name is not None :
@@ -247,12 +251,12 @@ async def update_role(
247251 async def delete_role (self , role_id : UserID ) -> None :
248252 """Delete a role.
249253
250- System roles (admin, editor, viewer) cannot be deleted.
254+ Preset roles cannot be deleted.
251255 """
252256 role = await self .get_role (role_id )
253257
254- # System roles cannot be deleted
255- if role .slug in { "admin" , "editor" , "viewer" } :
258+ # Preset roles cannot be deleted
259+ if role .slug in self . _PROTECTED_ROLE_SLUGS :
256260 raise TracecatAuthorizationError ("Cannot delete system roles" )
257261
258262 # Check if role is in use by any group assignments
0 commit comments