6.1 ACL
ada perubahan tertangguh untuk seksyen ini. More information about translations
The Acl behavior provides a way to seamlessly integrate a model with your ACL system. It can create both AROs or ACOs transparently.
To use the new behavior, you can add it to the $actsAs property of your model. When adding it to the actsAs array you choose to make the related Acl entry an ARO or an ACO. The default is to create AROs.
class User extends AppModel {
var $actsAs = array('Acl' => array('type' => 'requester'));
}
class User extends AppModel {var $actsAs = array('Acl' => array('type' => 'requester'));}
This would attach the Acl behavior in ARO mode. To join the ACL behavior in ACO mode use:
class Post extends AppModel {
var $actsAs = array('Acl' => array('type' => 'controlled'));
}
class Post extends AppModel {var $actsAs = array('Acl' => array('type' => 'controlled'));}
You can also attach the behavior on the fly like so:
$this->Post->Behaviors->attach('Acl', array('type' => 'controlled'));
$this->Post->Behaviors->attach('Acl', array('type' => 'controlled'));
6.1.1 Penggunaan AclBehavior
Kebanyakan AclBehavior berfungsi secara telus didalam model afterSave() anda. Walaupun begitu, dengan menggunakannya ia memerlukan model anda mempunyai parentNode(). Ini akan digunakan oleh AclBehavior untuk memastikan hubungan parent->child. Sesuatu method parentNode() mesti mengembalikan null atau kembalikan satu rujukan parent Model.
function parentNode() {
return null;
}
function parentNode() {return null;}
Jika anda mahu set satu node ACO atau ARO sebagai parent untuk Model anda, parentNode() mesti kembalikan alias nod ACO atau ARO tersebut
function parentNode() {
return 'root_node';
}
function parentNode() {return 'root_node';}
Satu contoh yang lebih compleks. Dengan menggunkan satu contoh model User, di mana 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']));
}
}
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']));}}
Di dalam contoh diatas, array yang dikembalikan hampir sama rupanya dengan keputusan dari model find. Ia penting untuk memperolehi nilai id set atau hubungan parentNode akan gagal. AclBehavior menggunakan data ini untuk membina struktur pokoknya.
6.1.2 node()
AclBehavior juga membolehkan anda untuk mengambil nod Acl yang berkaitan dengan sesuatu rekod model. Selepas setkan $model->id, anda boleh gunakan $model->node() untuk mengambil nod Acl yang berkaitan dengannya.
Anda juga boleh mengambil nod Acl dari apa - apa barisan, dengan menghantar data di dalam array.
$this->User->id = 1;
$node = $this->User->node();
$user = array('User' => array(
'id' => 1
));
$node = $this->User->node($user);
$this->User->id = 1;$node = $this->User->node();$user = array('User' => array('id' => 1));$node = $this->User->node($user);
Kedua - duanya akan mengembalikan nod Acl yang sama.
