diff --git a/app/blueprints/packages/releases.py b/app/blueprints/packages/releases.py
index 73d21e8..fbc1de4 100644
--- a/app/blueprints/packages/releases.py
+++ b/app/blueprints/packages/releases.py
@@ -133,7 +133,7 @@ def edit_release(package, id):
abort(404)
canEdit = package.checkPerm(current_user, Permission.MAKE_RELEASE)
- canApprove = package.checkPerm(current_user, Permission.APPROVE_RELEASE)
+ canApprove = release.checkPerm(current_user, Permission.APPROVE_RELEASE)
if not (canEdit or canApprove):
return redirect(package.getDetailsURL())
diff --git a/app/models/packages.py b/app/models/packages.py
index 1740535..9807e59 100644
--- a/app/models/packages.py
+++ b/app/models/packages.py
@@ -870,7 +870,7 @@ class PackageRelease(db.Model):
self.releaseDate = datetime.datetime.now()
def approve(self, user):
- if not self.package.checkPerm(user, Permission.APPROVE_RELEASE):
+ if not self.checkPerm(user, Permission.APPROVE_RELEASE):
return False
if self.approved:
@@ -895,24 +895,26 @@ class PackageRelease(db.Model):
elif type(perm) != Permission:
raise Exception("Unknown permission given to PackageRelease.checkPerm()")
- isOwner = user == self.package.author
+ isMaintainer = user == self.package.author or user in self.package.maintainers
if perm == Permission.DELETE_RELEASE:
if user.rank.atLeast(UserRank.ADMIN):
return True
- if not (isOwner or user.rank.atLeast(UserRank.EDITOR)):
+ if not (isMaintainer or user.rank.atLeast(UserRank.EDITOR)):
return False
if not self.package.approved or self.task_id is not None:
return True
- count = PackageRelease.query \
- .filter_by(package_id=self.package_id) \
+ count = self.package.releases \
.filter(PackageRelease.id > self.id) \
.count()
return count > 0
+ elif perm == Permission.APPROVE_RELEASE:
+ return isMaintainer and user.rank.atLeast(
+ UserRank.MEMBER if self.approved else UserRank.NEW_MEMBER)
else:
raise Exception("Permission {} is not related to releases".format(perm.name))
diff --git a/app/templates/packages/release_edit.html b/app/templates/packages/release_edit.html
index 7340ec6..a32f5db 100644
--- a/app/templates/packages/release_edit.html
+++ b/app/templates/packages/release_edit.html
@@ -34,7 +34,7 @@
{% else %}
- {% if package.checkPerm(current_user, "APPROVE_RELEASE") %}
+ {% if release.checkPerm(current_user, "APPROVE_RELEASE") %}
{{ render_checkbox_field(form.approved, class_="my-3") }}
{% else %}
Approved: {{ release.approved }}
diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html
index 5ab8095..f99448c 100644
--- a/app/templates/packages/view.html
+++ b/app/templates/packages/view.html
@@ -453,12 +453,12 @@