diff options
author | rubenwardy <rw@rubenwardy.com> | 2018-05-13 15:40:37 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2018-05-13 15:40:37 +0100 |
commit | 4508d6f48634eae3939cc0600824e6a0cf54efce (patch) | |
tree | ecd2eb03564d40d1803a227046f2b88e7ae0a329 /app/models.py | |
parent | e372bb810d848daa0c630d7df4e28d6c6d3ec437 (diff) | |
download | cheatdb-4508d6f48634eae3939cc0600824e6a0cf54efce.tar.xz |
Add ability to edit editrequests
Diffstat (limited to 'app/models.py')
-rw-r--r-- | app/models.py | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/app/models.py b/app/models.py index 113a1cb..01340bd 100644 --- a/app/models.py +++ b/app/models.py @@ -49,6 +49,7 @@ class Permission(enum.Enum): APPROVE_NEW = "APPROVE_NEW" CHANGE_RELEASE_URL = "CHANGE_RELEASE_URL" CHANGE_RANK = "CHANGE_RANK" + EDIT_EDITREQUEST = "EDIT_EDITREQUEST" # Only return true if the permission is valid for *all* contexts # See Package.checkPerm for package-specific contexts @@ -248,7 +249,7 @@ class Package(db.Model): author=self.author.username, name=self.name) def getCreateEditRequestURL(self): - return url_for("create_editrequest_page", + return url_for("create_edit_editrequest_page", ptype=self.type.toName(), author=self.author.username, name=self.name) @@ -353,6 +354,9 @@ class EditRequest(db.Model): title = db.Column(db.String(100), nullable=False) desc = db.Column(db.String(1000), nullable=True) + # 0 - open + # 1 - merged + # 2 - rejected status = db.Column(db.Integer, nullable=False, default=0) changes = db.relationship("EditRequestChange", backref="request", @@ -379,11 +383,38 @@ class EditRequest(db.Model): name=self.package.name, id=self.id) + def getEditURL(self): + return url_for("create_edit_editrequest_page", + ptype=self.package.type.toName(), + author=self.package.author.username, + name=self.package.name, + id=self.id) + def applyAll(self, package): for change in self.changes: change.apply(package) + def checkPerm(self, user, perm): + if not user.is_authenticated: + return False + + if type(perm) == str: + perm = Permission[perm] + elif type(perm) != Permission: + raise Exception("Unknown permission given to EditRequest.checkPerm()") + + isOwner = user == self.author + + # Members can edit their own packages, and editors can edit any packages + if perm == Permission.EDIT_EDITREQUEST: + return isOwner or user.rank.atLeast(UserRank.EDITOR) + + else: + raise Exception("Permission {} is not related to packages".format(perm.name)) + + + class EditRequestChange(db.Model): id = db.Column(db.Integer, primary_key=True) |