From 82f53ef0c6fa92951eba7ed1ba9f5237dc9a6449 Mon Sep 17 00:00:00 2001 From: Jiri Kalvoda <jirikalvoda@kam.mff.cuni.cz> Date: Wed, 6 Oct 2021 13:02:14 +0200 Subject: [PATCH] =?UTF-8?q?mo.rights:=20Ke=C5=A1ov=C3=A1n=C3=AD=20root=5Fp?= =?UTF-8?q?lace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mo/db.py | 3 ++- mo/rights.py | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mo/db.py b/mo/db.py index 1b3e5ff9..c52547d2 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 b0e8878a..1c8fdfa8 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( -- GitLab