jw-python/tools/python/jwutils/auth/Auth.py

72 lines
1.4 KiB
Python
Raw Normal View History

# -*- 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], who: 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)