diff --git a/app/__init__.py b/app/__init__.py index 4d171758..939ebb6b 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -118,7 +118,7 @@ def check_for_ban(): if current_user.rank == models.UserRank.BANNED: current_user.rank = models.UserRank.MEMBER models.db.session.commit() - elif current_user.ban or current_user.rank == models.UserRank.BANNED: + elif current_user.is_banned: if current_user.ban: flash(gettext("Banned:") + " " + current_user.ban.message, "danger") else: diff --git a/app/models/packages.py b/app/models/packages.py index e8f0d55f..04d9f946 100644 --- a/app/models/packages.py +++ b/app/models/packages.py @@ -1066,7 +1066,7 @@ class PackageRelease(db.Model): return True def check_perm(self, user, perm): - if not user.is_authenticated: + if not user.is_authenticated or user.is_banned: return False if type(perm) == str: @@ -1092,9 +1092,7 @@ class PackageRelease(db.Model): return count > 0 elif perm == Permission.APPROVE_RELEASE: - return user.rank.at_least(UserRank.APPROVER) or \ - (is_maintainer and user.rank.at_least( - UserRank.MEMBER if self.approved else UserRank.NEW_MEMBER)) + return is_maintainer or user.rank.at_least(UserRank.APPROVER) else: raise Exception("Permission {} is not related to releases".format(perm.name)) diff --git a/app/models/users.py b/app/models/users.py index c4925a16..e726118f 100644 --- a/app/models/users.py +++ b/app/models/users.py @@ -192,6 +192,10 @@ class User(db.Model, UserMixin): ban = db.relationship("UserBan", foreign_keys="UserBan.user_id", back_populates="user", uselist=False) + @property + def is_banned(self): + return (self.ban and not self.ban.has_expired) or self.rank == UserRank.BANNED + def get_dict(self): from app.utils.flask import abs_url_for return {