Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Quick tip: the base command is `/elections` (alias: `/democracyelections`).
- `elections.permissions.reload` (default: op)
- Allows `/elections reloadperms`.
- `elections.delete` (default: op)
- Extra gate for delete operations (used by `/elections export delete`). Managers/Admins can also delete.
- Extra gate for delete operations (used by `/elections export delete` and election deletion). Admins can also delete.
- `elections.admin` (default: op)
- Admin umbrella. Inherits all Elections permissions (including `elections.command`).
- `elections.user` (default: true)
Expand All @@ -56,7 +56,7 @@ All commands require `elections.command` plus the specific node:
- `/elections export ballots admin <local|online> <id>`
- Export only ballots as JSON (pretty printed) with voter names. Ballots are objects with `id`, `voter`, and `selections`. Requires: `elections.export.ballots.admin` (or `elections.admin`).
- `/elections export delete <pasteId> confirm`
- Delete a paste on paste.gg (needs a valid API key). Requires: `elections.export` + (`elections.delete` or `elections.manager`/`elections.admin`).
- Delete a paste on paste.gg (needs a valid API key). Requires: `elections.export` + (`elections.delete` or `elections.admin`).
- `/elections export dispatch`
- Process the local queue now (uploads pending files). Requires: `elections.manager` (or `elections.admin`).
- `/elections reloadperms`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -421,8 +421,7 @@ private void handleAdminRemoteExport(CommandContext context,
private void executeDelete(CommandContext context, ExportMessagesConfig messages) {
Elections plugin = context.plugin();

if (!context.sender().hasPermission("elections.manager") &&
!context.sender().hasPermission("elections.delete") &&
if (!context.sender().hasPermission("elections.delete") &&
!context.sender().hasPermission("elections.admin")) {
Component msg = MiniMessageUtil.parseOrPlain(messages.errorNoPermission);
context.sender().sendMessage(msg);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,10 +232,10 @@ public void run() {
builder.button(miniMessage(config.candidatesBtn, placeholders), context -> new CandidatesAddMenu(context.player(), this, electionService, electionId).open());
builder.button(miniMessage(config.requirementsBtn, placeholders), context -> new RequirementsMenu(context.player(), this, electionService, electionId).open());

// Delete with double confirmation (requires manager permission); hidden for DELETED elections
// Delete with double confirmation (requires manager and delete permission); hidden for DELETED elections
if (election.getStatus() != net.democracycraft.elections.internal.data.ElectionStatus.DELETED) {
builder.button(miniMessage(config.deleteBtn, placeholders), context -> {
if (!context.player().hasPermission("elections.manager") && !context.player().hasPermission("elections.admin")) {
if ((!context.player().hasPermission("elections.manager") || !context.player().hasPermission("elections.delete")) && !context.player().hasPermission("elections.admin")) {
context.player().sendMessage(miniMessage(config.permissionDeniedMsg));
return;
}
Expand Down
Loading