Coverage for src / lexigram / admin / resources / roles.py: 0%
17 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-10 14:02 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-10 14:02 +0800
1"""Roles management resource for Lexigram Admin."""
3from __future__ import annotations
5from lexigram.admin.models.auth import AdminRoleEntity # type: ignore[import-untyped]
6from lexigram.admin.resources.base import Resource
9class RolesResource(Resource):
10 """Manage RBAC roles and permissions."""
12 model = AdminRoleEntity
13 name = "roles"
14 label = "Roles"
15 icon = "shield-check"
16 category = "system"
18 # Fields to display in forms
19 fields = [
20 "name",
21 "description",
22 "permissions",
23 "inherits",
24 "is_system",
25 ]
27 # Fields to display in list view
28 list_display = [
29 "name",
30 "description",
31 "permissions",
32 "inherits",
33 "is_system",
34 ]
36 # SearchableProtocol fields
37 search_fields = ["name", "description"]
39 # Read-only fields (ensure system roles cannot be renamed easily)
40 readonly_fields = ["created_at", "updated_at"]
42 def can_delete(self, item: AdminRoleEntity) -> bool:
43 """Prevent deletion of system roles."""
44 return not item.is_system
46 def can_update(self, item: AdminRoleEntity) -> bool:
47 """Prevent renaming of system roles."""
48 # This is a simplification; ideally we'd allow updating permissions but not name
49 return True