Coverage for src / lexigram / admin / rbac / registry.py: 60%

10 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-08-13 22:14 +0800

1"""Global registry for permissions and roles.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING 

6 

7from lexigram.admin.rbac.schema import ResourcePermissions 

8 

9if TYPE_CHECKING: 

10 from lexigram.admin.rbac.service import PermissionService 

11 

12_resource_registry: dict[str, ResourcePermissions] = {} 

13 

14 

15def register_resource_permissions( 

16 resource_name: str, 

17 permissions: ResourcePermissions, 

18 permission_service: PermissionService | None = None, 

19) -> None: 

20 """Register permissions for a resource. 

21 

22 Args: 

23 resource_name: Name of the resource. 

24 permissions: Permission schema to register. 

25 permission_service: Injected :class:`~lexigram.admin.rbac.service.PermissionService` 

26 instance. When provided, the schema is also registered on the service. 

27 """ 

28 _resource_registry[resource_name] = permissions 

29 if permission_service is not None: 

30 permission_service.register(resource_name, permissions) 

31 

32 

33def get_resource_permissions(resource_name: str) -> ResourcePermissions: 

34 """Get registered permissions for a resource.""" 

35 return _resource_registry.get(resource_name, ResourcePermissions())