Hallå!
Jag måste ha hjälp med detta nu. Suttit fast ett tag. Det handlar om en rekursiv funktion.
Jag har valt att skapa ett gruppsystem med hjälp av YAML. Såhär ser konfigurationen ut nu.
http://pastebin.com/2v01wV14
Och efter att ha laddat in detta med PHP får jag en array som ser ut såhär:
http://pastebin.com/6qnKAYka
Allting funkar hittills! Nu måste jag bara hämta alla behörigheter hos en viss grupp. Jag måste också räkna med arven som varje grupp har. Med arv menar jag behörigheter som gruppen ärver från en annan grupp.
Såhär ser det ut förtillfället och jag får bara massa felmeddelanden. Jag lyckas bara inte pussla ihop detta. Hjälp en som har huvudvärk.
PHP-kod:
function LoadPermissions($gid) {
include('Spyc.php');
$groups = Spyc::YAMLLoad('groups.yml');
foreach($groups["groups"] as $key => $group)
{
if($gid == $group["id"])
{
if($group["inheritance"] != "") {
$inherited_permissions = LoadInheritedPermissions($group["inheritance"], $groups);
$group["permissions"] = array_merge($group["permissions"], $inherited_permissions);
}
var_dump($group["permissions"]);
return $group;
}
}
}
// Den fantastiska rekursiva funktionen
function LoadInheritedPermissions($inherited, $groups)
{
// En variabel för att spara alla permissions
$tmp_permissions = array();
// Loopa igenom alla grupper för att hitta arvet
foreach($groups["groups"] as $key => $group)
{
// Här hittar vi vårt arv
if($key == $inherited)
{
// Spara ner dessa permissions
$tmp_permissions = array_merge($tmp_permissions, $group["permissions"]);
// Kolla om detta arv har ett arv
if($group["inheritance"] != "")
{
// Då kör vi denna funktion igen
$tmp_permissions = array_merge($tmp_permissions, LoadInheritedPermissions($group["inheritance"], $groups));
}
return $tmp_permissions;
}
}
}