diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-07-11 01:34:51 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-07-11 01:42:47 +0100 |
commit | bf927c50f00bd15c7bc1765b7d5fb0c6a6abeb86 (patch) | |
tree | ff27c709826ce17002e1d670938b5a6142608695 /app/models.py | |
parent | 5f7be4b4337358e35c9eda4b261260a08a958b4a (diff) | |
download | cheatdb-bf927c50f00bd15c7bc1765b7d5fb0c6a6abeb86.tar.xz |
Add the ability to lock threads
Diffstat (limited to 'app/models.py')
-rw-r--r-- | app/models.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/app/models.py b/app/models.py index acd427a..d37dea3 100644 --- a/app/models.py +++ b/app/models.py @@ -90,6 +90,8 @@ class Permission(enum.Enum): EDIT_EDITREQUEST = "EDIT_EDITREQUEST" SEE_THREAD = "SEE_THREAD" CREATE_THREAD = "CREATE_THREAD" + COMMENT_THREAD = "COMMENT_THREAD" + LOCK_THREAD = "LOCK_THREAD" UNAPPROVE_PACKAGE = "UNAPPROVE_PACKAGE" TOPIC_DISCARD = "TOPIC_DISCARD" CREATE_TOKEN = "CREATE_TOKEN" @@ -1075,12 +1077,14 @@ class Thread(db.Model): package_id = db.Column(db.Integer, db.ForeignKey("package.id"), nullable=True) package = db.relationship("Package", foreign_keys=[package_id]) - review_id = db.Column(db.Integer, db.ForeignKey("package_review.id"), nullable=True) - review = db.relationship("PackageReview", foreign_keys=[review_id]) + review_id = db.Column(db.Integer, db.ForeignKey("package_review.id"), nullable=True) + review = db.relationship("PackageReview", foreign_keys=[review_id]) author_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) title = db.Column(db.String(100), nullable=False) - private = db.Column(db.Boolean, server_default="0") + private = db.Column(db.Boolean, server_default="0", nullable=False) + + locked = db.Column(db.Boolean, server_default="0", nullable=False) created_at = db.Column(db.DateTime, nullable=False, default=datetime.datetime.utcnow) @@ -1111,8 +1115,16 @@ class Thread(db.Model): if self.package: isMaintainer = isMaintainer or user in self.package.maintainers + canSee = not self.private or isMaintainer or user.rank.atLeast(UserRank.EDITOR) + if perm == Permission.SEE_THREAD: - return not self.private or isMaintainer or user.rank.atLeast(UserRank.EDITOR) + return canSee + + elif perm == Permission.COMMENT_THREAD: + return canSee and (not self.locked or user.rank.atLeast(UserRank.MODERATOR)) + + elif perm == Permission.LOCK_THREAD: + return user.rank.atLeast(UserRank.MODERATOR) else: raise Exception("Permission {} is not related to threads".format(perm.name)) |