Empfehlungen: Erweiterte Suche

Acl: Wie mit habtm

Klassen zur Datenverarbeitung in den Controllern (DRY)

Acl: Wie mit habtm

Beitragvon getit » Mi 27. Mai 2009, 23:21

Hallo,

habe folgende Tabellen:

Users:
id,int(5),auto_increment, primary key
name,varchar(64)
username,varchar(64),unique
password,varchar(64)
email,varchar(128)
created,datetime
modified,datetime
enabled,tinyint(1)

mit folgendem Model:
Code: Alles auswählen

<?php
class User extends AppModel {

    var $name = 'User';
    var $validate = array(
        'name' => array('notempty'),
        'username' => array('notempty'),
        'password' => array('notempty')
    );
   
    var $hasAndBelongsToMany = array(
        'Usergroup',
        'Document'
    );
}
?>
 



und die Tabelle usergroups:
id,int(4),auto_increment,primary key,
group,varchar(100)

mit folgendem Model:
Code: Alles auswählen

<?php
class Usergroup extends AppModel {

    var $name = 'Usergroup';

    var $hasAndBelongsToMany = array(
        'User'
    );
}
?>
 



und die Verknüpfungstabelle usergroups_users:
usergroup_id,int(4)
user_id,int(5)


Bin nach dem Buch "Webentwicklung mit CakePHP" folgendermaßen vorgegangen:
1. Habe ACL initialisiert -> cake acl initdb (natürlich vorher in das app-Verzeichnis der Applikation gewechselt)
2. Habe zum testen ein ACO definiert -> cake acl create aco / ROOT, cake acl create Users index
3. Habe die Models angepasst
Code: Alles auswählen

<?php
class User extends AppModel {

    var $name = 'User';
    var $validate = array(
        'name' => array('notempty'),
        'username' => array('notempty'),
        'password' => array('notempty')
    );
   
    var $hasAndBelongsToMany = array(
        'Usergroup',
        'Document'
    );
   
    var $actsAs = array('Acl' => 'requester');
   
    function bindNode($user) {
        if (empty($user['Usergroup']['id'])) {
            return null;
        } else {
            return array('model' => 'Usergroup');
        }
    }
}
?>
 

Code: Alles auswählen

<?php
class Usergroup extends AppModel {

    var $name = 'Usergroup';

    //The Associations below have been created with all possible keys, those that are not needed can be removed
    var $hasAndBelongsToMany = array(
        'User'
    );

    var $actsAs = array('Acl' => 'requester');  //Zuweisung des Acl-Behaviours
    var $components = array('Acl', 'Auth');
   
    function parentNode() {
        return 'Usergroups';
    }
}
?>
 

4. Habe sowohl in den UsersController als auch in den UsergroupsController folgendes Zeile geschrieben
Code: Alles auswählen

var $components = array('Acl', 'Auth');
 

5. Habe dann meine Anwendung aufgerufen - ich erhalte folgende Fehlermeldung:
Warning (512): Callback parentNode() not defined in User [CORE\cake\libs\model\behaviors\acl.php, line 62]

Kann jemand helfen?
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Acl: Wie mit habtm

Beitragvon Molekül » Sa 17. Okt 2009, 10:41

Hallo,
ich bin nach dem selben Buch (1. korrigierter Nachdruck) vorgegangen und hatte ebenfalls erst mal Probleme, und wenn ich mich recht erinnere exakt die selbe Fehlermeldung.

Auf Seite 317 und 323 steht im Code, wie bei dir, in der User Klasse
Code: Alles auswählen
var $actsAs = array('Acl' => 'requester');

Allerdings wird danach auf Seite 323 lange erklärt, warum im User Model das ACL-Behaviour nicht zugewiesen wird. Ich hab es daher in diese Zeile in der Userklasse entfernt und dann lief es. Allerdings habe ich nur eine User belongsTo und kein User belongsToAndHasMany Relation.
Grüße, Molekül
Molekül
 
Beiträge: 27
Registriert: Fr 25. Sep 2009, 09:45
CakePHP-Version: 3.x


Zurück zu Components

Wer ist online?

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

cron