diff --git a/app/models.py b/app/models.py
index 583c92a9..4b835bbe 100644
--- a/app/models.py
+++ b/app/models.py
@@ -76,6 +76,7 @@ class Permission(enum.Enum):
APPROVE_CHANGES = "APPROVE_CHANGES"
DELETE_PACKAGE = "DELETE_PACKAGE"
CHANGE_AUTHOR = "CHANGE_AUTHOR"
+ CHANGE_NAME = "CHANGE_NAME"
MAKE_RELEASE = "MAKE_RELEASE"
ADD_SCREENSHOTS = "ADD_SCREENSHOTS"
APPROVE_SCREENSHOT = "APPROVE_SCREENSHOT"
@@ -572,6 +573,10 @@ class Package(db.Model):
else:
return user.rank.atLeast(UserRank.EDITOR)
+ # Anyone can change the package name when not approved, but only editors when approved
+ elif perm == Permission.CHANGE_NAME:
+ return not self.approved or user.rank.atLeast(UserRank.EDITOR)
+
# Editors can change authors and approve new packages
elif perm == Permission.APPROVE_NEW or perm == Permission.CHANGE_AUTHOR:
return user.rank.atLeast(UserRank.EDITOR)
diff --git a/app/templates/packages/create_edit.html b/app/templates/packages/create_edit.html
index 9a115313..1b3153a8 100644
--- a/app/templates/packages/create_edit.html
+++ b/app/templates/packages/create_edit.html
@@ -47,7 +47,7 @@
{{ render_field(form.type, class_="pkg_meta col-sm-2") }}
{{ render_field(form.title, class_="pkg_meta col-sm-7") }}
- {{ render_field(form.name, class_="pkg_meta col-sm-3") }}
+ {{ render_field(form.name, class_="pkg_meta col-sm-3", readonly=package.approved and not package.checkPerm(current_user, "CHANGE_NAME")) }}
{{ render_field(form.short_desc, class_="pkg_meta") }}
{{ render_multiselect_field(form.tags, class_="pkg_meta") }}
diff --git a/app/views/packages/packages.py b/app/views/packages/packages.py
index 51de415d..e74ca7ef 100644
--- a/app/views/packages/packages.py
+++ b/app/views/packages/packages.py
@@ -243,6 +243,12 @@ def create_edit_package_page(author=None, name=None):
package = Package()
package.author = author
wasNew = True
+
+ elif package.approved and package.name != form.name.data and \
+ not package.checkPerm(current_user, Permission.CHANGE_NAME):
+ flash("Unable to change package name", "danger")
+ return redirect(url_for("create_edit_package_page", author=author, name=name))
+
else:
triggerNotif(package.author, current_user,
"{} edited".format(package.title), package.getDetailsURL())