Исходный код EJIO.user.flags

## /user/flags.py

from enum import IntEnum, IntFlag, auto

__all__ = [
    'UserPermissions',
    'UserRole',
    'ROLE_PERMISSIONS',
]


[документация] class UserPermissions(IntFlag): """Побитовые флаги разрешений системы.""" NONE = 0 READ = auto() WRITE = auto() DELETE = auto() MANAGE_USERS = auto() ALL = READ | WRITE | DELETE | MANAGE_USERS
[документация] class UserRole(IntEnum): """Иерархический реестр ролей пользователей.""" GUEST = 1 USER = 2 MODERATOR = 3 ADMIN = 4 ROOT = 5 @property def permissions(self) -> UserPermissions: """ Возвращает жестко закрепленный набор разрешений для текущей роли. :return: Набор разрешений для роли. """ return ROLE_PERMISSIONS.get(self, UserPermissions.NONE)
# Промежуточная структура прямого иерархического соответствия разрешений ролям ROLE_PERMISSIONS: dict[UserRole, UserPermissions] = { UserRole.ROOT: UserPermissions.ALL, UserRole.ADMIN: UserPermissions.ALL, UserRole.MODERATOR: UserPermissions.READ | UserPermissions.WRITE | UserPermissions.DELETE, UserRole.USER: UserPermissions.READ | UserPermissions.WRITE, UserRole.GUEST: UserPermissions.READ, }