WIP: Access method for commands

This commit is contained in:
Svenja Reissaus 2018-08-21 15:02:16 -03:00
parent 94c4ee815a
commit 9c6cc187f2
21 changed files with 111 additions and 66 deletions

Binary file not shown.

View File

@ -34,16 +34,12 @@ public class CmdBan extends FCommand {
@Override @Override
public void perform() { public void perform() {
// Adds bypass to admins and clean permission check // Simplified for clarity
if (!fme.isAdminBypassing()) { if (!this.hasAccess(PermissableAction.BAN)) {
Access access = myFaction.getAccess(fme, PermissableAction.BAN); fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage bans");
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { return;
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "ban");
return;
}
} }
// Good on permission checks. Now lets just ban the player. // Good on permission checks. Now lets just ban the player.
FPlayer target = argAsFPlayer(0); FPlayer target = argAsFPlayer(0);
if (target == null) { if (target == null) {

View File

@ -6,6 +6,7 @@ import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions; import com.massivecraft.factions.Factions;
import com.massivecraft.factions.struct.BanInfo; import com.massivecraft.factions.struct.BanInfo;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL; import com.massivecraft.factions.zcore.util.TL;
import java.util.ArrayList; import java.util.ArrayList;
@ -32,6 +33,10 @@ public class CmdBanlist extends FCommand {
@Override @Override
public void perform() { public void perform() {
if (!this.hasAccess(PermissableAction.BAN)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage bans");
return;
}
Faction target = myFaction; Faction target = myFaction;
if (!args.isEmpty()) { if (!args.isEmpty()) {
target = argAsFaction(0); target = argAsFaction(0);

View File

@ -32,12 +32,9 @@ public class CmdChest extends FCommand {
return; return;
} }
// This permission check is way too explicit but it's clean // This permission check is way too explicit but it's clean
if (!fme.isAdminBypassing()) { if (!this.hasAccess(PermissableAction.CHEST)) {
Access access = myFaction.getAccess(fme, PermissableAction.CHEST); fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "access chest");
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { return;
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "access chest");
return;
}
} }
me.openInventory(fme.getFaction().getChest()); me.openInventory(fme.getFaction().getChest());

View File

@ -37,12 +37,9 @@ public class CmdClaim extends FCommand {
int radius = this.argAsInt(0, 1); // Default to 1 int radius = this.argAsInt(0, 1); // Default to 1
final Faction forFaction = this.argAsFaction(1, myFaction); // Default to own final Faction forFaction = this.argAsFaction(1, myFaction); // Default to own
if (!fme.isAdminBypassing()) { if (!this.hasAccess(PermissableAction.TERRITORY)) {
Access access = myFaction.getAccess(fme, PermissableAction.TERRITORY); fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "change faction territory");
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { return;
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "change faction territory");
return;
}
} }

View File

@ -34,12 +34,9 @@ public class CmdDeinvite extends FCommand {
@Override @Override
public void perform() { public void perform() {
FPlayer you = this.argAsBestFPlayerMatch(0); FPlayer you = this.argAsBestFPlayerMatch(0);
if (!fme.isAdminBypassing()) { if (!this.hasAccess(PermissableAction.INVITE)) {
Access access = myFaction.getAccess(fme, PermissableAction.INVITE); fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { return;
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
return;
}
} }
if (you == null) { if (you == null) {
FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD); FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD);

View File

@ -3,6 +3,7 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.P; import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL; import com.massivecraft.factions.zcore.util.TL;
public class CmdDelFWarp extends FCommand { public class CmdDelFWarp extends FCommand {
@ -22,6 +23,10 @@ public class CmdDelFWarp extends FCommand {
@Override @Override
public void perform() { public void perform() {
String warp = argAsString(0); String warp = argAsString(0);
if (!this.hasAccess(PermissableAction.WARP)){
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage warps");
return;
}
if (myFaction.isWarp(warp)) { if (myFaction.isWarp(warp)) {
if (!transact(fme)) { if (!transact(fme)) {
return; return;

View File

@ -45,13 +45,6 @@ public class CmdDisband extends FCommand {
boolean isMyFaction = fme != null && faction == myFaction; boolean isMyFaction = fme != null && faction == myFaction;
if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.DISBAND);
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "disband faction");
return;
}
}
if (!faction.isNormal()) { if (!faction.isNormal()) {
msg(TL.COMMAND_DISBAND_IMMUTABLE.toString()); msg(TL.COMMAND_DISBAND_IMMUTABLE.toString());
return; return;
@ -60,6 +53,10 @@ public class CmdDisband extends FCommand {
msg(TL.COMMAND_DISBAND_MARKEDPERMANENT.toString()); msg(TL.COMMAND_DISBAND_MARKEDPERMANENT.toString());
return; return;
} }
if (!this.hasAccess(PermissableAction.DISBAND)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "disband faction");
return;
}
// check for tnt before disbanding. // check for tnt before disbanding.

View File

@ -31,12 +31,9 @@ public class CmdFWarp extends FCommand {
@Override @Override
public void perform() { public void perform() {
//TODO: check if in combat. //TODO: check if in combat.
if (!fme.isAdminBypassing()) { if (!this.hasAccess(PermissableAction.WARP)) {
Access access = myFaction.getAccess(fme, PermissableAction.WARP); fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "use warps");
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { return;
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "use warps");
return;
}
} }

View File

@ -36,6 +36,7 @@ public class CmdFly extends FCommand {
this.senderMustBeMember = true; this.senderMustBeMember = true;
this.senderMustBeModerator = false; this.senderMustBeModerator = false;
} }
/// I'll optimize this later today or tomorrow
public static void startParticles() { public static void startParticles() {
id = Bukkit.getScheduler().scheduleSyncRepeatingTask(P.p, new Runnable() { id = Bukkit.getScheduler().scheduleSyncRepeatingTask(P.p, new Runnable() {

View File

@ -2,6 +2,7 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.P; import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL; import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -33,7 +34,10 @@ public class CmdGetVault extends FCommand {
Location vaultLocation = fme.getFaction().getVault(); Location vaultLocation = fme.getFaction().getVault();
ItemStack vault = P.p.createItem(Material.CHEST, 1, (short) 0, P.p.color(P.p.getConfig().getString("fvault.Item.Name")), P.p.colorList(P.p.getConfig().getStringList("fvault.Item.Lore"))); ItemStack vault = P.p.createItem(Material.CHEST, 1, (short) 0, P.p.color(P.p.getConfig().getString("fvault.Item.Name")), P.p.colorList(P.p.getConfig().getStringList("fvault.Item.Lore")));
if (!this.hasAccess(PermissableAction.VAULT)) {
fme.msg(TL.GENERIC_NOPERMISSION, "use vault");
return;
}
//check if vault is set //check if vault is set
if (vaultLocation != null) { if (vaultLocation != null) {
fme.msg(TL.COMMAND_GETVAULT_ALREADYSET); fme.msg(TL.COMMAND_GETVAULT_ALREADYSET);

View File

@ -49,12 +49,9 @@ public class CmdHome extends FCommand {
fme.msg(TL.COMMAND_HOME_TELEPORTDISABLED); fme.msg(TL.COMMAND_HOME_TELEPORTDISABLED);
return; return;
} }
if (!fme.isAdminBypassing()) { if (!this.hasAccess(PermissableAction.HOME)) {
Access access = myFaction.getAccess(fme, PermissableAction.HOME); fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "teleport home");
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { return;
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "teleport home");
return;
}
} }

View File

@ -22,6 +22,7 @@ public class CmdInspect extends FCommand {
@Override @Override
public void perform() { public void perform() {
// Who can inspect?
if (fme.isInspectMode()) { if (fme.isInspectMode()) {
fme.setInspectMode(false); fme.setInspectMode(false);
msg(TL.COMMAND_INSPECT_DISABLED_MSG); msg(TL.COMMAND_INSPECT_DISABLED_MSG);

View File

@ -48,12 +48,9 @@ public class CmdInvite extends FCommand {
return; return;
} }
if (!fme.isAdminBypassing()) { if (!this.hasAccess(PermissableAction.INVITE)) {
Access access = myFaction.getAccess(fme, PermissableAction.INVITE); fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { return;
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
return;
}
} }
if (myFaction.isInvited(target)) { if (myFaction.isInvited(target)) {

View File

@ -79,8 +79,7 @@ public class CmdKick extends FCommand {
// - Make sure the player is in the faction. // - Make sure the player is in the faction.
// - Make sure the kicked player has lower rank than the kicker. // - Make sure the kicked player has lower rank than the kicker.
if (!fme.isAdminBypassing()) { if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.KICK); if (!this.hasAccess(PermissableAction.KICK, false)) {
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) {
fme.msg(TL.GENERIC_NOPERMISSION, "kick"); fme.msg(TL.GENERIC_NOPERMISSION, "kick");
return; return;
} }

View File

@ -1,6 +1,7 @@
package com.massivecraft.factions.cmd; package com.massivecraft.factions.cmd;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.util.TL; import com.massivecraft.factions.zcore.util.TL;
public class CmdLogins extends FCommand { public class CmdLogins extends FCommand {
@ -18,6 +19,11 @@ public class CmdLogins extends FCommand {
@Override @Override
public void perform() { public void perform() {
/// Perhaps add a PermissableAction later?
if (!fme.getRole().isAtLeast(Role.MODERATOR)) {
fme.msg(TL.GENERIC_NOPERMISSION, "monitor joins");
return;
}
boolean monitor = fme.isMonitoringJoins(); boolean monitor = fme.isMonitoringJoins();
fme.msg(TL.COMMAND_LOGINS_TOGGLE, String.valueOf(!monitor)); fme.msg(TL.COMMAND_LOGINS_TOGGLE, String.valueOf(!monitor));
fme.setMonitorJoins(!monitor); fme.setMonitorJoins(!monitor);

View File

@ -37,12 +37,9 @@ public class CmdSetFWarp extends FCommand {
// This statement allows us to check if they've specifically denied it, or default to // This statement allows us to check if they've specifically denied it, or default to
// the old setting of allowing moderators to set warps. // the old setting of allowing moderators to set warps.
if (!fme.isAdminBypassing()) { if (!this.hasAccess(PermissableAction.SETWARP)) {
Access access = myFaction.getAccess(fme, PermissableAction.SETWARP); fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set warps");
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) { return;
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set warps");
return;
}
} }

View File

@ -40,12 +40,9 @@ public class CmdSethome extends FCommand {
return; return;
} }
if (!fme.isAdminBypassing()) { if (!this.hasAccess(PermissableAction.SETHOME) && !Permission.SETHOME_ANY.has(sender, true)) {
Access access = myFaction.getAccess(fme, PermissableAction.SETHOME); fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set home");
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN && !Permission.SETHOME_ANY.has(sender, true)) { return;
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set home");
return;
}
} }
// Can the player set the faction home HERE? // Can the player set the faction home HERE?

View File

@ -4,6 +4,7 @@ import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap; import com.google.common.collect.ListMultimap;
import com.massivecraft.factions.FLocation; import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL; import com.massivecraft.factions.zcore.util.TL;
public class CmdShowClaims extends FCommand { public class CmdShowClaims extends FCommand {
@ -25,6 +26,11 @@ public class CmdShowClaims extends FCommand {
@Override @Override
public void perform() { public void perform() {
// #suggestion
if (!this.hasAccess(PermissableAction.TERRITORY)) {
fme.msg(TL.GENERIC_NOPERMISSION, "manage territory");
return;
}
sendMessage(TL.COMMAND_SHOWCLAIMS_HEADER.toString().replace("{faction}", fme.getFaction().describeTo(fme))); sendMessage(TL.COMMAND_SHOWCLAIMS_HEADER.toString().replace("{faction}", fme.getFaction().describeTo(fme)));
ListMultimap<String, String> chunkMap = ArrayListMultimap.create(); ListMultimap<String, String> chunkMap = ArrayListMultimap.create();
String format = TL.COMMAND_SHOWCLAIMS_CHUNKSFORMAT.toString(); String format = TL.COMMAND_SHOWCLAIMS_CHUNKSFORMAT.toString();

View File

@ -4,6 +4,7 @@ import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers; import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL; import com.massivecraft.factions.zcore.util.TL;
import mkremins.fanciful.FancyMessage; import mkremins.fanciful.FancyMessage;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -21,6 +22,10 @@ public class CmdShowInvites extends FCommand {
@Override @Override
public void perform() { public void perform() {
if (!this.hasAccess(PermissableAction.INVITE)) {
fme.msg(TL.GENERIC_NOPERMISSION, "manage invites");
return;
}
FancyMessage msg = new FancyMessage(TL.COMMAND_SHOWINVITES_PENDING.toString()).color(ChatColor.GOLD); FancyMessage msg = new FancyMessage(TL.COMMAND_SHOWINVITES_PENDING.toString()).color(ChatColor.GOLD);
for (String id : myFaction.getInvites()) { for (String id : myFaction.getInvites()) {
FPlayer fp = FPlayers.getInstance().getById(id); FPlayer fp = FPlayers.getInstance().getById(id);

View File

@ -5,6 +5,8 @@ import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Role; import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.WarmUpUtil; import com.massivecraft.factions.util.WarmUpUtil;
import com.massivecraft.factions.zcore.MCommand; import com.massivecraft.factions.zcore.MCommand;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL; import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -25,6 +27,7 @@ public abstract class FCommand extends MCommand<P> {
public boolean senderMustBeModerator; public boolean senderMustBeModerator;
public boolean senderMustBeAdmin; public boolean senderMustBeAdmin;
public boolean senderMustBeColeader; public boolean senderMustBeColeader;
protected PermissableAction actionPermission;
public boolean isMoneyCommand; public boolean isMoneyCommand;
@ -43,6 +46,47 @@ public abstract class FCommand extends MCommand<P> {
senderMustBeAdmin = false; senderMustBeAdmin = false;
} }
public boolean hasAccess() {
if (this.permission == null || this.fme == null) return false;
if (!this.fme.isAdminBypassing()) {
Access access = myFaction.getAccess(this.fme, permission);
if (access != Access.ALLOW && this.fme.getRole() != Role.ADMIN) {
return false;
}
}
return true;
}
public boolean hasAccess(boolean checkifAdmin) {
if (this.permission == null || this.fme == null) return false;
if (!this.fme.isAdminBypassing() && checkifAdmin) {
Access access = myFaction.getAccess(this.fme, permission);
if (access != Access.ALLOW && this.fme.getRole() != Role.ADMIN) {
return false;
}
}
return true;
}
public boolean hasAccess(PermissableAction perm) {
if (this.permission == null || this.fme == null) return false;
if (!this.fme.isAdminBypassing()) {
Access access = myFaction.getAccess(this.fme, perm);
if (access != Access.ALLOW && this.fme.getRole() != Role.ADMIN) {
return false;
}
}
return true;
}
public boolean hasAccess(PermissableAction perm, boolean checkifAdmin) {
if (this.permission == null || this.fme == null) return false;
if (!this.fme.isAdminBypassing() && checkifAdmin) {
Access access = myFaction.getAccess(this.fme, perm);
if (access != Access.ALLOW && this.fme.getRole() != Role.ADMIN) {
return false;
}
}
return true;
}
@Override @Override
public void execute(CommandSender sender, List<String> args, List<MCommand<?>> commandChain) { public void execute(CommandSender sender, List<String> args, List<MCommand<?>> commandChain) {
if (sender instanceof Player) { if (sender instanceof Player) {