diff --git a/files/classes/user.py b/files/classes/user.py index 70c333704d..b2ca7dcfa8 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -288,11 +288,16 @@ class User(Base): if self.agendaposter: return False if self.profile_url.startswith('/e/') and not self.customtitle and self.namecolor == DEFAULT_COLOR: return False return True + + @lazy + def actually_mods(self, sub): + if not sub: return False + return bool(g.db.query(Mod.user_id).filter_by(user_id=self.id, sub=sub).one_or_none()) @lazy def mods(self, sub): if self.is_suspended_permanently or self.shadowbanned: return False - return self.admin_level >= PERMS['HOLE_GLOBAL_MODERATION'] or bool(g.db.query(Mod.user_id).filter_by(user_id=self.id, sub=sub).one_or_none()) + return self.admin_level >= PERMS['HOLE_GLOBAL_MODERATION'] or self.actually_mods(sub) @lazy def exiled_from(self, sub): diff --git a/files/helpers/const.py b/files/helpers/const.py index f3a986152d..b56da59db6 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -166,7 +166,7 @@ PERMS = { # Minimum admin_level to perform action. 'ADMIN_HOME_VISIBLE': 2, 'DOMAINS_BAN': 3, 'HOLE_CREATE': 0, - 'HOLE_GLOBAL_MODERATION': 4, + 'HOLE_GLOBAL_MODERATION': 3, 'FLAGS_REMOVE': 2, 'VOTES_VISIBLE': 0, 'USER_BLOCKS_VISIBLE': 0, diff --git a/files/routes/subs.py b/files/routes/subs.py index f2204c3077..49235891c5 100644 --- a/files/routes/subs.py +++ b/files/routes/subs.py @@ -53,7 +53,7 @@ def exile_comment(v, cid): u = c.author - if u.mods(sub): abort(403) + if u.actually_mods(sub): abort(403) if not u.exiled_from(sub): exile = Exile(user_id=u.id, sub=sub, exiler_id=v.id)