from atlas_um import pgdb from .claims import Role class User: """ User identity model, based on external verified claims. """ @property def is_authenticated(self): return True @property def id(self): return self._sub @property def claims(self): return self._claims @property def dna_account(self): dna_account = pgdb.DNAAccount.query.by_sub(self.id).first() return dna_account or pgdb.NullDNAAccount() @property def is_admin(self): return Role(Role.Values.admin) in self.claims @property def is_developer(self): return Role(Role.Values.developer) in self.claims @property def is_manager(self): return Role(Role.Values.manager) in self.claims def __init__(self, sub, claims): self._sub = sub self._claims = claims def __str__(self): return f"User<{self.id}>" def __eq__(self, other): return self.id == other.id def __hash__(self): return hash(self.id) def __repr__(self): return f"User({self.id}, {self._claims})" class AnonymousUser: @property def is_authenticated(self): return False @property def dna_account(self): return pgdb.NullDNAAccount() @property def id(self): return None @property def is_admin(self): return False @property def is_developer(self): return False @property def is_manager(self): return False @property def claims(self): return () def __str__(self): return "AnonymousUser" def __repr__(self): return "AnonymousUser()"