Patch an issue preventing perms from properly being inherited

This commit is contained in:
AlexTheCoder 2018-09-05 03:29:44 -05:00
parent 337f8bccd9
commit 9909ffe92c
1 changed files with 7 additions and 23 deletions

View File

@ -63,13 +63,13 @@ public enum PermissionGroup
static
{
MutableGraph<PermissionGroup> _builder = GraphBuilder.directed().build();
MutableGraph<PermissionGroup> builder = GraphBuilder.directed().build();
// Add each group as a node, and add edges between parent (inherited) and child nodes
Stream.of(PermissionGroup.values()).peek(_builder::addNode).forEach(group ->
group._parentGroups.forEach(parent -> _builder.putEdge(parent, group)));
Stream.of(PermissionGroup.values()).peek(builder::addNode).forEach(group ->
group._parentGroups.forEach(parent -> builder.putEdge(parent, group)));
_groupHierarchy = ImmutableGraph.copyOf(_builder);
_groupHierarchy = ImmutableGraph.copyOf(builder);
}
// We want a graph so we can walk the hierarchy downward and recalculate permissions when needed
@ -144,25 +144,9 @@ public enum PermissionGroup
private void bakePermissions()
{
// Calculate inherited permissions
Map<Permission, Boolean> inherited = calculateInheritable();
// Now: walk down the group hierarchy and bake permissions
bakeForward(inherited);
}
private void bakeForward(Map<Permission, Boolean> inherited)
{
_bakedPerms = new IdentityHashMap<>();
_bakedPerms.putAll(inherited);
_bakedPerms.putAll(_specificPerms); // Specific permissions override inheritable ones
_groupHierarchy.successors(this).forEach(successor ->
{
Map<Permission, Boolean> newInherited = new IdentityHashMap<>(inherited);
newInherited.putAll(successor._inheritablePerms);
successor.bakeForward(newInherited);
});
_bakedPerms = calculateInheritable();
_bakedPerms.putAll(_specificPerms);
_groupHierarchy.successors(this).forEach(PermissionGroup::bakePermissions);
}
// Calculate inheritable permissions from parent nodes and this node