Исходный код 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,
}