WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Rekursiv funktion, grupper med arv (https://www.wn.se/forum/showthread.php?t=1058746)

Anaxa 2013-08-09 17:57

Rekursiv funktion, grupper med arv
 
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_permissionsLoadInheritedPermissions($group["inheritance"], $groups));
                }
                return 
$tmp_permissions;
            }
        }
    } 



Alla tider är GMT +2. Klockan är nu 13:29.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson