Skip to content

Commit

Permalink
Add command /rmplugin permission group add permission [Group name] [P…
Browse files Browse the repository at this point in the history
…ermission name].

#9
  • Loading branch information
RMajewski committed Jul 22, 2018
1 parent 0d3cd5f commit 100eb7a
Show file tree
Hide file tree
Showing 5 changed files with 202 additions and 3 deletions.
49 changes: 48 additions & 1 deletion src/main/java/de/rene_majewski/rm_plugin/config/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,18 @@ public final class Config {
*/
public static final String MESSAGE_PERMISSION_GROUP_ADD_PARENT_NO = "rmplugin.messages.permission.group.add.parent_no";

/**
* Gibt den Pfad zur Nachricht "Permission wurde gesetzt" an.
*
* @since 0.2
*/
public static final String MESSAGE_PERMISSION_GROUP_ADD_PERMISSION = "rmplugin.messages.permission.group.add.permission";

/**
* Gibt den Pfad zur Nachricht "Permission wurde nicht gesetzt" an.
*/
public static final String MESSAGE_PERMISSION_GROUP_ADD_PERMISSION_NO = "rmplugin.messages.permission.group.add.permission_no";

/**
* Gibt den Pfad zur Fehler-Nachricht für "add parent Fehler mit Parameter"
* an.
Expand All @@ -104,13 +116,28 @@ public final class Config {
*/
public static final String MESSAGE_ERROR_PERMISSION_GROUP_ADD_PARENT = "rmplugin.messages.error.permission.group.add.parent";

/**
* Gibt den Pfad zu Fehler-Nachricht für "add permission Fehler mit Parameter"
* an.
*
* @since 0.2
*/
public static final String MESSAGE_ERROR_PERMISSION_GROUP_ADD_PERMISSION = "rmplugin.messages.error.permission.group.add.permission";

/**
* Gibt den Pfad zur Fehler-Nachricht für "Gruppe nicht gefunden" an.
*
* @since 0.2
*/
public static final String MESSAGE_ERROR_PERMISSION_NO_GROUP_FOUND = "rmplugin.messages.error.permission.group.not_found";

/**
* Gibt den Pfad zur Fehler-Nachrciht für "Permission nicht gefunden" an.
*
* @since 0.2
*/
public static final String MESSAGE_ERROR_NO_PERMISSION_FOUND = "rmplugin.messages.error.permission.not_found";

/**
* Gibt den Pfad zur Nachrciht für die Nachricht "Fehler ist aufgetreten".
*
Expand Down Expand Up @@ -226,6 +253,14 @@ public final class Config {
*/
public static final String DB_TABLE_LOG_BLOCK = "rmplugin.db.tables.log_block";


/**
* Gibt den Pfad zur Einstellung der Tabelle für die Permissions an.
*
* @since 0.2
*/
public static final String DB_TABLE_PERMISSION = "rmplugin.db.tables.permission";

/**
* Gibt den Pfad zur Einstellung der Tabelle für die Gruppen an.
*
Expand All @@ -240,6 +275,13 @@ public final class Config {
*/
public static final String DB_TABLE_PERMISSION_GROUP_PARENT = "rmplugin.db.tables.permission_group_parent";

/**
* Gibt den Pfad zur Einstellung der Tabelle für die erteilten Permissions.
*
* @since 0.2
*/
public static final String DB_TABLE_PERMISSION_ALLOCATE = "rmplugin.db.tables.permmision_allocate";


/**
* Gib den Namen der Permission zum Neuladen der Konfiguration an.
Expand Down Expand Up @@ -398,13 +440,16 @@ private void setDefaults() {
_plugin.getConfig().addDefault(MESSAGE_ERROR_NO_GROUP, "Du musst einen Gruppen-Namen angegeben.");
_plugin.getConfig().addDefault(MESSAGE_ERROR_PERMISSION_GROUP_ADD_PARENT, "Falsche Anzahl an Parameter.");
_plugin.getConfig().addDefault(MESSAGE_ERROR_PERMISSION_NO_GROUP_FOUND, "Die Gruppe '?' konnte nicht gefunden werden.");
_plugin.getConfig().addDefault(MESSAGE_ERROR_NO_PERMISSION_FOUND, "Die Permission '?' konnte nicht gefunden werden.");

_plugin.getConfig().addDefault(MESSAGE_PERMISSION_GROUP_CREATE, "Die Gruppe '?' wurde erfolgreichreich erzeugt.");
_plugin.getConfig().addDefault(MESSAGE_PERMISSION_GROUP_CREATE_NO, "Die Gruppe '?' konnte nicht erzeugt werden.");
_plugin.getConfig().addDefault(MESSAGE_PERMISSION_GROUP_DELETE, "Die Gruppe '?' wurde gelöscht.");
_plugin.getConfig().addDefault(MESSAGE_PERMISSION_GROUP_DELETE_NO, "Die Gruppe '?' konnte nicht gelöscht werden.");
_plugin.getConfig().addDefault(MESSAGE_PERMISSION_GROUP_ADD_PARENT, "Der Gruppe '?' wurde die Vater-Gruppe '?' hinzugefügt.");
_plugin.getConfig().addDefault(MESSAGE_PERMISSION_GROUP_ADD_PARENT_NO, "Der Gruppe '?' konnt die Vater-Gruppe '?' nicht hinzugefügt.");
_plugin.getConfig().addDefault(MESSAGE_PERMISSION_GROUP_ADD_PARENT_NO, "Der Gruppe '?' konnte die Vater-Gruppe '?' nicht hinzugefügt.");
_plugin.getConfig().addDefault(MESSAGE_PERMISSION_GROUP_ADD_PERMISSION, "Der Gruppe '?' wurde die Permission '?' hinzugefügt.");
_plugin.getConfig().addDefault(MESSAGE_PERMISSION_GROUP_ADD_PERMISSION_NO, "Der Gruppe '?' konnte die Permission '?' nicht hinzugefügt werden.");


_plugin.getConfig().addDefault(DB_CONFIG_HOST, "localhost");
Expand All @@ -422,8 +467,10 @@ private void setDefaults() {
_plugin.getConfig().addDefault(DB_TABLE_LOG_LOGGIN, "log_loggin");
_plugin.getConfig().addDefault(DB_TABLE_LOG_WORLD_CHANGE, "log_world_change");
_plugin.getConfig().addDefault(DB_TABLE_LOG_BLOCK, "log_block");
_plugin.getConfig().addDefault(DB_TABLE_PERMISSION, "permission");
_plugin.getConfig().addDefault(DB_TABLE_PERMISSION_GROUP, "group");
_plugin.getConfig().addDefault(DB_TABLE_PERMISSION_GROUP_PARENT, "group_parent");
_plugin.getConfig().addDefault(DB_TABLE_PERMISSION_ALLOCATE, "permission_allocate");

_plugin.getConfig().addDefault(COLOR_HELP_TEXT, "§7");
_plugin.getConfig().addDefault(COLOR_HELP_COMMAND, "§6");
Expand Down
79 changes: 79 additions & 0 deletions src/main/java/de/rene_majewski/rm_plugin/data/MySql.java
Original file line number Diff line number Diff line change
Expand Up @@ -625,4 +625,83 @@ public int getGroupId(String name) {

return result;
}

/**
* Ermittelt die ID der angegeben Permission. Wurde keine ID in der Datenbank
* gefunden, so wird die Permission angelegt.
*
* @param permission Name der Permission, deren ID ermittelt werden soll.
*
* @return ID der Permission.
*/
public int getPermissionId(String permission) {
int result = -1;

PreparedStatement ps = null;
ResultSet rs = null;

String tmp = permission;
if (tmp.startsWith("-")) {
tmp = tmp.substring(1);
}

try {
if (!this.isPermissionExists(tmp)) {
ps = this.getConnection().prepareStatement("INSERT INTO " + this.getTableName(Config.DB_TABLE_PERMISSION) + " (name) VALUES (?)");
ps.setString(1, tmp);
ps.executeUpdate();
this.closeRessources(rs, ps);
}

ps = this.getConnection().prepareStatement("SELECT id FROM " + this.getTableName(Config.DB_TABLE_PERMISSION) + " WHERE name=?");
ps.setString(1, tmp);
rs = ps.executeQuery();
if (rs.next()) {
result = rs.getInt("id");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeRessources(rs, ps);
}

return result;
}

/**
* Überprüft, ob die angegebene Permission existiert.
*
* @param name Permission, wo geschaut werden soll, ob sie in der Datenbank
* schon existiert.
*
* @return <code>true</code>, wenn die Permission in der Datenbank existiert.
* <code>false</code>, wenn noch ken Datensatz existiert.
*
* @since 0.2
*/
public boolean isPermissionExists(String name) {
boolean result = false;

String tmp = name;
if (tmp.startsWith("-")) {
tmp = tmp.substring(1);
}

PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = this.getConnection().prepareStatement("SELECT id FROM " + this.getTableName(Config.DB_TABLE_PERMISSION) + " WHERE name = ?");
ps.setString(1, name);
rs = ps.executeQuery();
if (rs.next()) {
result = true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeRessources(rs, ps);
}

return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,20 @@
* @author René Majewski
*/
public class PermissionManager {
/**
* Gibt den Wert für eine Spieler-Permission an.
*
* @since 0.2
*/
public static final int CLAZZ_PLAYER = 1;

/**
* Gibt den Wert für eine Gruppen-Permission an.
*
* @since 0.2
*/
public static final int CLAZZ_GROUP = 2;

/**
* Speichert die Main-Klasse des Plugins.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import de.rene_majewski.rm_plugin.RMPlugin;
import de.rene_majewski.rm_plugin.commands.CommandClass;
import de.rene_majewski.rm_plugin.config.Config;
import de.rene_majewski.rm_plugin.permissions.PermissionManager;

/**
* Reagiert auf die Gruppen-Befehle.
Expand Down Expand Up @@ -169,6 +170,14 @@ private void add(String command, String arg1, String arg2, CommandSender sender)
}

addParent(arg1, arg2, sender);
} else if (command.equalsIgnoreCase("permission") || (command.equalsIgnoreCase("perm"))) {
if (arg1 == null || arg1.isEmpty() || arg2 == null || arg2.isEmpty()) {
this.sendMessage(this._plugin.getMyConfig().getString(Config.MESSAGE_ERROR_PERMISSION_GROUP_ADD_PERMISSION), sender);
this.sendMessage(this.createCommandHelpMessage("permission group permission [Group name] [Permission name]", "Fügt einer Grupp eine Permission hinzu."), sender);
return;
}

addPermission(arg1, arg2, sender);
}
}

Expand Down Expand Up @@ -212,6 +221,56 @@ private void addParent(String child, String parent, CommandSender sender) {
}
}

/**
* Fügt eine Permission der Gruppe hinzu.
*
* @param group Gruppe, der die Permission hinzugefügt werden soll.
*
* @param permission Permission, die der Gruppe hinzugefügt werden soll.
*
* @param sender Sender, der diesen Befehl gesendet.
*
* @since 0.2
*/
private void addPermission(String group, String permission, CommandSender sender) {
PreparedStatement ps = null;
int group1 = this._plugin.getMySql().getGroupId(group);

if (group1 == -1) {
this.sendMessage(this._plugin.getMyConfig().getString(Config.MESSAGE_ERROR_PERMISSION_NO_GROUP_FOUND).replace("?", group), sender);
return;
}

int perm = this._plugin.getMySql().getPermissionId(permission);
if (perm == -1) {
this.sendMessage(this._plugin.getMyConfig().getString(Config.MESSAGE_ERROR_NO_PERMISSION_FOUND).replace("?", permission), sender);
return;
}

boolean negate = false;
if (permission.startsWith("-")) {
negate = true;
permission = permission.substring(1);
}

try {
ps = this._plugin.getMySql().getConnection().prepareStatement("INSERT INTO " + this._plugin.getMySql().getTableName(Config.DB_TABLE_PERMISSION_ALLOCATE) + "(group_id,permission_id,clazz,negate) VALUES(?,?,?,?)");
ps.setInt(1, Integer.valueOf(group1));
ps.setInt(2, Integer.valueOf(perm));
ps.setInt(3, PermissionManager.CLAZZ_GROUP);
ps.setBoolean(4, negate);
if (ps.executeUpdate() > 0) {
this.sendMessage(this._plugin.getMyConfig().getString(Config.MESSAGE_PERMISSION_GROUP_ADD_PERMISSION).replaceFirst("(\\?)", group).replace("?", permission), sender);
} else {
this.sendMessage(this._plugin.getMyConfig().getString(Config.MESSAGE_PERMISSION_GROUP_ADD_PERMISSION_NO).replaceFirst("(\\?)", group).replace("?", permission), sender);
}
} catch (SQLException e) {
this.sendErrorMessage(sender, e, this._plugin.getMyConfig().getString(Config.MESSAGE_PERMISSION_GROUP_ADD_PERMISSION_NO).replaceFirst("(\\?)", group).replace("?", permission));
} finally {
this._plugin.getMySql().closeRessources(null, ps);
}
}

/**
* Zeigt die Liste mit allen Gruppen an.
*
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/sql/group_permissions.sql
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
CREATE TABLE IF NOT EXISTS `&permission_allocate` (
`id` BIGINT(20) AUTO_INCREMENT,
`parent_id` BIGINT(20) NOT NULL,
`group_id` BIGINT(20) NOT NULL,
`permission_id` BIGINT(20) NOT NULL,
`clazz` INT(3) NOT NULL,
`negate` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`),
UNIQUE KEY(`parent_id`, `permission_id`)
UNIQUE KEY(`group_id`, `permission_id`)
) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

0 comments on commit 100eb7a

Please sign in to comment.