diff --git a/mo/db.py b/mo/db.py index 1b3e5ff9fe2c8d728718de6f5b3e7f7ae40fbf06..c52547d23b428018d8a8657ca1bc804a0371de97 100644 --- a/mo/db.py +++ b/mo/db.py @@ -136,7 +136,8 @@ class Place(Base): return place_levels[self.level].in_name() + " " + name -def get_root_place(): +def get_root_place() -> Place: + """Obvykle voláme mo.rights.Gatekeeper.get_root_place(), kterékešuje.""" return get_session().query(Place).filter_by(parent=None).one() diff --git a/mo/rights.py b/mo/rights.py index b0e8878a0244ec1f2db399956c074892a8e025fc..1c8fdfa80d3216fd2779c7cf9d655866e0548071 100644 --- a/mo/rights.py +++ b/mo/rights.py @@ -358,6 +358,7 @@ class Gatekeeper: roles: List[db.UserRole] parent_cache: Dict[int, List[db.Place]] rights_cache: Dict[Tuple[Optional[int], Optional[int], Optional[str], Optional[int], Optional[db.RoleType]], Rights] + root_place: Optional[db.Place] def __init__(self, user: db.User): self.user = user @@ -365,6 +366,12 @@ class Gatekeeper: assert user.is_org or user.is_admin self.parent_cache = {} self.rights_cache = {} + self.root_place = None + + def get_root_place(self) -> db.Place: + if not self.root_place: + self.root_place = db.get_root_place() + return self.root_place def get_ancestors(self, place: db.Place) -> List[db.Place]: pid = place.place_id @@ -425,7 +432,7 @@ class Gatekeeper: elif for_place: place = for_place else: - place = db.get_root_place() + place = self.get_root_place() rights = RoundRights() rights.round = round rights._clone_from(self.rights_for(