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
public void perform() {
// Adds bypass to admins and clean permission check
if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.BAN);
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "ban");
return;
}
// Simplified for clarity
if (!this.hasAccess(PermissableAction.BAN)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage bans");
return;
}
// Good on permission checks. Now lets just ban the player.
FPlayer target = argAsFPlayer(0);
if (target == null) {

View File

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

View File

@ -32,12 +32,9 @@ public class CmdChest extends FCommand {
return;
}
// This permission check is way too explicit but it's clean
if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.CHEST);
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "access chest");
return;
}
if (!this.hasAccess(PermissableAction.CHEST)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "access chest");
return;
}
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
final Faction forFaction = this.argAsFaction(1, myFaction); // Default to own
if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.TERRITORY);
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "change faction territory");
return;
}
if (!this.hasAccess(PermissableAction.TERRITORY)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "change faction territory");
return;
}

View File

@ -34,12 +34,9 @@ public class CmdDeinvite extends FCommand {
@Override
public void perform() {
FPlayer you = this.argAsBestFPlayerMatch(0);
if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.INVITE);
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
return;
}
if (!this.hasAccess(PermissableAction.INVITE)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
return;
}
if (you == null) {
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.P;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
public class CmdDelFWarp extends FCommand {
@ -22,6 +23,10 @@ public class CmdDelFWarp extends FCommand {
@Override
public void perform() {
String warp = argAsString(0);
if (!this.hasAccess(PermissableAction.WARP)){
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage warps");
return;
}
if (myFaction.isWarp(warp)) {
if (!transact(fme)) {
return;

View File

@ -45,13 +45,6 @@ public class CmdDisband extends FCommand {
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()) {
msg(TL.COMMAND_DISBAND_IMMUTABLE.toString());
return;
@ -60,6 +53,10 @@ public class CmdDisband extends FCommand {
msg(TL.COMMAND_DISBAND_MARKEDPERMANENT.toString());
return;
}
if (!this.hasAccess(PermissableAction.DISBAND)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "disband faction");
return;
}
// check for tnt before disbanding.

View File

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

View File

@ -36,6 +36,7 @@ public class CmdFly extends FCommand {
this.senderMustBeMember = true;
this.senderMustBeModerator = false;
}
/// I'll optimize this later today or tomorrow
public static void startParticles() {
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.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Location;
import org.bukkit.Material;
@ -33,7 +34,10 @@ public class CmdGetVault extends FCommand {
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")));
if (!this.hasAccess(PermissableAction.VAULT)) {
fme.msg(TL.GENERIC_NOPERMISSION, "use vault");
return;
}
//check if vault is set
if (vaultLocation != null) {
fme.msg(TL.COMMAND_GETVAULT_ALREADYSET);

View File

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

View File

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

View File

@ -48,12 +48,9 @@ public class CmdInvite extends FCommand {
return;
}
if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.INVITE);
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
return;
}
if (!this.hasAccess(PermissableAction.INVITE)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "manage invites");
return;
}
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 kicked player has lower rank than the kicker.
if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.KICK);
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) {
if (!this.hasAccess(PermissableAction.KICK, false)) {
fme.msg(TL.GENERIC_NOPERMISSION, "kick");
return;
}

View File

@ -1,6 +1,7 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.util.TL;
public class CmdLogins extends FCommand {
@ -18,6 +19,11 @@ public class CmdLogins extends FCommand {
@Override
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();
fme.msg(TL.COMMAND_LOGINS_TOGGLE, String.valueOf(!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
// the old setting of allowing moderators to set warps.
if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.SETWARP);
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set warps");
return;
}
if (!this.hasAccess(PermissableAction.SETWARP)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set warps");
return;
}

View File

@ -40,12 +40,9 @@ public class CmdSethome extends FCommand {
return;
}
if (!fme.isAdminBypassing()) {
Access access = myFaction.getAccess(fme, PermissableAction.SETHOME);
if (access != Access.ALLOW && fme.getRole() != Role.ADMIN && !Permission.SETHOME_ANY.has(sender, true)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set home");
return;
}
if (!this.hasAccess(PermissableAction.SETHOME) && !Permission.SETHOME_ANY.has(sender, true)) {
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "set home");
return;
}
// 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.massivecraft.factions.FLocation;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
public class CmdShowClaims extends FCommand {
@ -25,6 +26,11 @@ public class CmdShowClaims extends FCommand {
@Override
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)));
ListMultimap<String, String> chunkMap = ArrayListMultimap.create();
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.FPlayers;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import mkremins.fanciful.FancyMessage;
import org.bukkit.ChatColor;
@ -21,6 +22,10 @@ public class CmdShowInvites extends FCommand {
@Override
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);
for (String id : myFaction.getInvites()) {
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.util.WarmUpUtil;
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 org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -25,6 +27,7 @@ public abstract class FCommand extends MCommand<P> {
public boolean senderMustBeModerator;
public boolean senderMustBeAdmin;
public boolean senderMustBeColeader;
protected PermissableAction actionPermission;
public boolean isMoneyCommand;
@ -43,6 +46,47 @@ public abstract class FCommand extends MCommand<P> {
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
public void execute(CommandSender sender, List<String> args, List<MCommand<?>> commandChain) {
if (sender instanceof Player) {