# -*- coding: utf-8 -*- from typing import Optional, Union import abc from enum import Enum, auto from jwutils import log, Config class Access(Enum): # export Read = auto() Modify = auto() Create = auto() Delete = auto() class Group: # export def __repr__(self): return f'Group({self.name})' @abc.abstractmethod def _name(self) -> str: pass @property def name(self) -> str: return self._name() class User: # export def __repr__(self): return f'User({self.name})' @abc.abstractmethod def _name(self) -> str: pass @abc.abstractmethod def _groups(self) -> list[Group]: pass @property def name(self) -> str: return self._name() @property def groups(self) -> list[Group]: return self._groups() class Auth: # export def __init__(self, conf: Config): self.__conf = conf @abc.abstractmethod def _access(self, what: str, access_type: Optional[Access]=None, who: Optional[Union[User|Group]]=None) -> bool: pass @abc.abstractmethod def _current_user(self) -> User: pass @property def conf(self): return self.__conf @property def current_user(self) -> User: return self._current_user() def access(self, what: str, access_type: Optional[Access]=None, who: Optional[Union[User|Group]]=None) -> bool: return self._access(what, access_type, who)