diff --git a/app/models.py b/app/models.py index 583c92a..4b835bb 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 9a11531..1b3153a 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 51de415..e74ca7e 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())