mirror of
https://github.com/EssentialsX/Essentials.git
synced 2024-09-18 02:51:18 +02:00
Fix for pushing perms of non superperms supporting plugins
This commit is contained in:
parent
d3f6e82474
commit
f2dd51cf57
70
EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java
Executable file → Normal file
70
EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java
Executable file → Normal file
@ -80,6 +80,76 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||||||
return ph.getUser(userName).getGroup().getName();
|
return ph.getUser(userName).getGroup().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns All permissions (including inheritance) of player name.
|
||||||
|
* @param userName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<String> getAllPlayersPermissions(String userName) {
|
||||||
|
|
||||||
|
User user = ph.getUser(userName);
|
||||||
|
List<String> playerPermArray = new ArrayList<String>(user.getPermissionList());
|
||||||
|
List<String> playerMainGroupPermArray = new ArrayList<String>(user.getGroup().getPermissionList());
|
||||||
|
List<String> subGroupsPermArray = new ArrayList<String>();
|
||||||
|
List<String> returnPermArray = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (String subGroup : user.subGroupListStringCopy()) {
|
||||||
|
subGroupsPermArray.addAll(ph.getGroup(subGroup).getPermissionList());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String permission : subGroupsPermArray) {
|
||||||
|
/*
|
||||||
|
* Add each Negated permission
|
||||||
|
* unless it's being overridden by a higher permission
|
||||||
|
*/
|
||||||
|
if (permission.startsWith("-")
|
||||||
|
&& !playerMainGroupPermArray.contains(permission.substring(1))
|
||||||
|
&& !playerPermArray.contains(permission.substring(1))
|
||||||
|
&& !playerMainGroupPermArray.contains("*")
|
||||||
|
&& !playerPermArray.contains("*")) {
|
||||||
|
if (!returnPermArray.contains(permission)) {
|
||||||
|
returnPermArray.add(permission);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (!returnPermArray.contains(permission)
|
||||||
|
&& !playerMainGroupPermArray.contains("-"+permission)
|
||||||
|
&& !playerPermArray.contains("-"+permission)) {
|
||||||
|
returnPermArray.add(permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String permission : playerMainGroupPermArray) {
|
||||||
|
/*
|
||||||
|
* Add each Negated permission
|
||||||
|
* unless it's being overridden by a higher permission
|
||||||
|
*/
|
||||||
|
if (permission.startsWith("-")
|
||||||
|
&& !playerPermArray.contains(permission.substring(1))
|
||||||
|
&& !playerMainGroupPermArray.contains("*")
|
||||||
|
&& !playerPermArray.contains("*")) {
|
||||||
|
if (!returnPermArray.contains(permission)) {
|
||||||
|
returnPermArray.add(permission);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (!returnPermArray.contains(permission)
|
||||||
|
&& !playerPermArray.contains("-"+permission)) {
|
||||||
|
returnPermArray.add(permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String permission : playerPermArray) {
|
||||||
|
/*
|
||||||
|
* Add each permission
|
||||||
|
*/
|
||||||
|
if (!returnPermArray.contains(permission)) {
|
||||||
|
returnPermArray.add(permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnPermArray;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verify if player is in suck group.
|
* Verify if player is in suck group.
|
||||||
* It will check it's groups inheritance.
|
* It will check it's groups inheritance.
|
||||||
|
@ -16,8 +16,10 @@
|
|||||||
|
|
||||||
package org.anjocaido.groupmanager.permissions;
|
package org.anjocaido.groupmanager.permissions;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -115,6 +117,7 @@ public class BukkitPermissions {
|
|||||||
world = player.getWorld().getName();
|
world = player.getWorld().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// All permissions registered with Bukkit for this player
|
||||||
PermissionAttachment attachment = this.attachments.get(player);
|
PermissionAttachment attachment = this.attachments.get(player);
|
||||||
|
|
||||||
OverloadedWorldHolder worldData = GroupManager.getWorldsHolder().getWorldData(world);
|
OverloadedWorldHolder worldData = GroupManager.getWorldsHolder().getWorldData(world);
|
||||||
@ -127,18 +130,32 @@ public class BukkitPermissions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// find matching permissions
|
// find matching permissions
|
||||||
|
PermissionCheckResult permissionResult;
|
||||||
|
Boolean value;
|
||||||
for (Permission permission : registeredPermissions) {
|
for (Permission permission : registeredPermissions) {
|
||||||
PermissionCheckResult permissionResult = worldData.getPermissionsHandler().checkFullUserPermission(user, permission.getName());
|
permissionResult = worldData.getPermissionsHandler().checkFullUserPermission(user, permission.getName());
|
||||||
Boolean value = false;
|
if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND))
|
||||||
if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) {
|
|
||||||
value = false;
|
|
||||||
} else if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND))
|
|
||||||
value = true;
|
value = true;
|
||||||
|
else
|
||||||
|
value = false;
|
||||||
|
|
||||||
attachment.setPermission(permission, value);
|
attachment.setPermission(permission, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add any missing permissions for this player (non bukkit plugins)
|
||||||
|
List<String> playerPermArray = new ArrayList<String>(worldData.getPermissionsHandler().getAllPlayersPermissions(player.getName()));
|
||||||
|
|
||||||
|
for (String permission : playerPermArray) {
|
||||||
|
value = true;
|
||||||
|
if (permission.startsWith("-")) {
|
||||||
|
permission = permission.substring(1); // cut off -
|
||||||
|
value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!attachment.getPermissions().containsKey(permission)) {
|
||||||
|
attachment.setPermission(permission, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
player.recalculatePermissions();
|
player.recalculatePermissions();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
4
EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java
Executable file → Normal file
4
EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java
Executable file → Normal file
@ -3,6 +3,8 @@ package org.anjocaido.groupmanager.permissions;
|
|||||||
//import java.util.Collection;
|
//import java.util.Collection;
|
||||||
//import java.util.Map;
|
//import java.util.Map;
|
||||||
//import java.util.Set;
|
//import java.util.Set;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.anjocaido.groupmanager.data.Group;
|
import org.anjocaido.groupmanager.data.Group;
|
||||||
//import org.anjocaido.groupmanager.data.User;
|
//import org.anjocaido.groupmanager.data.User;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -229,4 +231,6 @@ public abstract class PermissionsReaderInterface {
|
|||||||
|
|
||||||
public abstract void removeGroupInfo(String name, String path);
|
public abstract void removeGroupInfo(String name, String path);
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
|
|
||||||
|
public abstract List<String> getAllPlayersPermissions(String userName);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user