Coverage for src/lexigram/admin/dashboard/permission_filter.py: 100%
13 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
1from __future__ import annotations
3from collections.abc import Callable, Sequence
4from typing import TypeVar
6from lexigram.admin.types import AdminUser
8T = TypeVar("T")
11class PermissionFilter:
12 """Filters contributor surface items based on user permissions."""
14 def filter(
15 self,
16 items: Sequence[T],
17 user: AdminUser | None,
18 get_required_permissions: Callable[[T], frozenset[str]],
19 ) -> list[T]:
20 """Return only items whose required permissions the *user* holds.
22 If *user* is ``None`` only items with empty required_permissions
23 are returned.
24 """
25 result: list[T] = []
26 for item in items:
27 perms = get_required_permissions(item)
28 if not perms or (
29 user is not None and perms.issubset(user.permissions or frozenset())
30 ):
31 result.append(item)
32 return result