This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release!

ACL

Das ACL Verhalten bietet die Möglichkeit bequem und einfach alle Models mit dem ACL System zu verbinden. Dabei können sowohl AROs als auch ACOs definiert werden.

Um diese Verhaltensweise nutzen zu können, muss man es zu dem $actsAs Array im Model hinzufügen. Dabei gibt man direkt an, ob es sich hierbei um ein ARO oder ein ACO handelt. Standardmäßig erstellt man AROs.

Folgender Code würde das ACL-Verhalten im ARO Modus aktivieren.

class User extends AppModel {
    var $actsAs = array('Acl' => array('type' => 'requester'));
}

Folgender Code würde das ACL-Verhalten im ACO Modus aktivieren.

class Post extends AppModel {
    var $actsAs = array('Acl' => array('type' => 'controlled'));
}

So kann man das ACL-Verhalten direkt zur Laufzeit aktivieren:

$this->Post->Behaviors->attach('Acl', array('type' => 'controlled'));

Benutzung von AclBehavior

Das meiste von AclBehavior arbeitet transparent nachdem die Model Funktion afterSave() aufgerufen wurde. Wird AclBehaviour verwendet, muss im Model die Funktion parentNode() definiert sein. Diese Funktion wird von AclBehavior genutzt um Eltern->Kind Beziehungen festzulegen. Die parentNode() Methode muss ‚null‘ oder eine Referenz eines Eltern Models zurückliefern.

function parentNode() {
    return null;
}

If you want to set an ACO or ARO node as the parent for your Model, parentNode() must return the alias of the ACO or ARO node.

function parentNode() {
        return 'root_node';
}

A more complete example. Using an example User Model, where User belongsTo Group.

function parentNode() {
    if (!$this->id && empty($this->data)) {
        return null;
    }
    $data = $this->data;
    if (empty($this->data)) {
        $data = $this->read();
    }
    if (!$data['User']['group_id']) {
        return null;
    } else {
        $this->Group->id = $data['User']['group_id'];
        $groupNode = $this->Group->node();
        return array('Group' => array('id' => $groupNode[0]['Aro']['foreign_key']));
    }
}

In the above example the return is an array that looks similar to the results of a model find. It is important to have the id value set or the parentNode relation will fail. The AclBehavior uses this data to construct its tree structure.

node()

Das ACL-Verhalten erlaubt es zu einem Model-Record die passende ACL-Node zu finden. Wenn $model->id gesetzt ist, kann man einfach $model->node() benutzen, um die dazu passende ACL-Node zu erhalten.

Man kann auch die ACL-Node für jede Zeile finden, indem man ein data-array übergibt.

$this->User->id = 1;
$node = $this->User->node();

$user = array('User' => array(
    'id' => 1
));
$node = $this->User->node($user);

Beides würde die gleiche, dazugehörige ACL-Node zurückliefern.