Empfehlungen: Erweiterte Suche

ACL: bindNode() und Arrays

Klassen zur Datenverarbeitung in den Controllern (DRY)

ACL: bindNode() und Arrays

Beitragvon Tobitobe » Mi 3. Dez 2008, 22:00

N'Abend allerseits,

ich werkle im Moment mal wieder etwas mit ACL's herum und setze dabei sowohl ein User-Model, als auch Group-Model ein.
Die ACL-Authentifizierung soll ausschließlich über die Groups erfolgen, allerdings sind User und Group per HABTM verknüpft.
Das Problem, was ich habe, ergibt sich letztlich beim Einsatz des Callbacks bindNode() im User-Model. Ich würde gerne ein Array mit mehreren Gruppen zurückgeben, da ein User theoretisch in mehreren Gruppen sein kann. Das Array zu füllen ist auch kein Thema, allerdings scheint es mir, dass die ACL-Component mit mehreren Groups nicht umgehen kann. Jedenfall haut es mir folgenden Dump um die Ohren:

Code: Alles auswählen

Warning (512): SQL Error: 1054: Unknown column 'Aro0.0' in 'where clause' [CORE/cake/libs/model/datasources/dbo_source.php, line 521]

Query: SELECT `Aro`.`id`, `Aro`.`parent_id`, `Aro`.`model`, `Aro`.`foreign_key`, `Aro`.`alias` FROM `dev_aros` AS `Aro` LEFT JOIN `dev_aros` AS `Aro0` ON (`Aro`.`lft` <= `Aro0`.`lft` AND `Aro`.`rght` >= `Aro0`.`rght`) WHERE `Aro0`.`0` IN ('Group', '12') AND `Aro0`.`1` IN ('Group', '8') ORDER BY `Aro`.`lft` DESC

Warning (512): AclNode::node() - Couldn't find Aro node identified by "Array
(
    [Aro0.0] => Array
        (
            [model] => Group
            [foreign_key] => 12
        )

    [Aro0.1] => Array
        (
            [model] => Group
            [foreign_key] => 8
        )

)


Klar, die Tabelle Aro0 gibt's nicht, nur Aro.

Die Methode sieht folgendermaßen aus:
Code: Alles auswählen

function bindNode($user) {
        $currentUser = $this->findById($user['User']['id']);                       

        if (empty ($currentUser['Group'])) {
            return null;
        } else {
            foreach($currentUser['Group'] as $group) {
                $groups[] = array('model' => 'Group',
                'foreign_key' => $group['id']);
            }  
            return $groups;
        }
}
 


Hat jemand vielleicht eine Idee? Ich grad echt auf dem Schlauch. Eigentlich muss es doch egal sein, ob als return ein oder mehrere Werte im Array kommen...

Herzlichen Dank,
Tobi
Tobitobe
 
Beiträge: 45
Registriert: Mi 11. Jun 2008, 08:41
Wohnort: Neuss
CakePHP-Version: 1.2.0.7962 Final
OS: Mac OS X

Re: ACL: bindNode() und Arrays

Beitragvon Tobitobe » Do 4. Dez 2008, 11:28

Huhu,

es scheint, als hätte ich selber eine Lösung gefunden.

Meine bindNode() sieht nun wie folgt aus:
Code: Alles auswählen

function bindNode($user) { 
        $currentUser = $this->findById($user['User']['id']);
        if (empty ($currentUser['Group'])) {
            return null;
        } else {
            foreach ($currentUser['Group'] as $group) {
                $groupIds[] = $group['id'];            
            }                      
            return array (
                'model' => 'Group',
                'foreign_key' => $groupIds
            );
        }
}
 


Die ACL-Compentent scheint nun richtig zu validieren und lässt mich meinen Rechten entsprechend durch. Jetzt teste ich aber noch, ob wirklich beide Rollen (in meinem Beispiel hat mein User 2 Rollen) ziehen oder nur die erste...
Tobitobe
 
Beiträge: 45
Registriert: Mi 11. Jun 2008, 08:41
Wohnort: Neuss
CakePHP-Version: 1.2.0.7962 Final
OS: Mac OS X

Re: ACL: bindNode() und Arrays

Beitragvon Tobitobe » Do 4. Dez 2008, 11:53

Tobitobe hat geschrieben:Jetzt teste ich aber noch, ob wirklich beide Rollen (in meinem Beispiel hat mein User 2 Rollen) ziehen oder nur die erste...


Dat funktioniert! Ich bin erleichtert...
Tobitobe
 
Beiträge: 45
Registriert: Mi 11. Jun 2008, 08:41
Wohnort: Neuss
CakePHP-Version: 1.2.0.7962 Final
OS: Mac OS X


Zurück zu Components

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron