CakePHP ialah rangka kerja pembangunan PHP popular yang menyediakan mekanisme kawalan kebenaran yang komprehensif, iaitu Senarai Kawalan Akses (ACL). Menggunakan ACL boleh membantu anda mengawal hak akses setiap pengguna dalam aplikasi anda. Dalam artikel ini, kami akan membincangkan cara menggunakan peranan ACL dalam CakePHP.
Pertama, kita perlu mengkonfigurasi komponen ACL dalam CakePHP. Tambahkan kod berikut dalam app_controller.php:
//引入Auth Component var $components = array('Acl', 'Auth'); //初始化AclComponent function initialize() { $this->Acl->initAcl(); }
Untuk menggunakan ACL dalam CakePHP, kita perlu mencipta peranan dan peraturan kebenaran. Pertama, kita perlu mencipta peranan ACL. Anda boleh menggunakan kod berikut dalam pengawal anda:
function addRole($parent=null){ if(!empty($this->data)){ $this->Acl->Aro->create(); $this->data['Aro']['model'] = 'Role'; if($this->Acl->Aro->save($this->data)){ $this->Session->setFlash(__('The Role has been saved.', true)); $this->redirect(array('action'=>'index')); } else { $this->Session->setFlash(__('The Role could not be saved. Please, try again.', true)); } } $parent = $this->Acl->Aro->findById($parent['Aro']['id']); $this->set(compact('parent')); }
Dalam kod di atas, apabila pengguna menyerahkan borang, kod akan mencipta peranan ACL baharu dalam pangkalan data. Kaedah $this->Acl->Aro->save() akan mengendalikan semua kebenaran yang berkaitan dengan ini dan menambah peranan baharu pada pangkalan data.
Seterusnya, kita perlu memberikan kebenaran kepada peranan tersebut. Untuk melakukan ini, kita perlu mencipta nod ACL dalam pangkalan data dan menetapkannya kepada peranan yang diperlukan. Dengan cara ini, peranan boleh mempunyai akses kepada nod. Kita boleh mencipta nod ACL menggunakan kod berikut:
function addNode(){ //加入‘Parent’节点,我们可以在此下添加子节点 $parentNode = $this->Acl->Aro->node('Role', null); $this->Acl->Aro->create(array('parent_id'=>$parentNode[0]['Aro']['id'], 'model'=>'Role','foreign_key'=>3)); // role id $this->Acl->Aro->save(); $this->Session->setFlash(__('Node saved', true)); }
Dalam kod di atas, kami telah mencipta nod kosong bernama "Ibu bapa". Nod ini ialah pemegang tempat yang tidak mengandungi sebarang fungsi, membenarkan kami menambah nod anak di bawahnya. Apabila kita menambah nod anak di bawah nod ini, nod anak ini akan mewarisi kebenaran nod induk.
Akhir sekali, kami perlu menulis kod untuk menyemak sama ada pengguna mempunyai hak akses kepada nod ACL tertentu. Untuk melakukan ini, kami boleh menggunakan kod berikut:
function check(){ $this->set('aro', $this->Acl->Aro->find('list', array('conditions'=>array('Aro.model'=>'Role')))); $this->set('aco', $this->Acl->Aco->find('list')); if(!empty($this->data)) { $aro = $this->data['Permission']['aro']; $aco = $this->data['Permission']['aco']; $access = $this->Acl->check($aro, $aco); $this->set('access', $access); } }
Dalam kod di atas, kami telah menentukan tindakan yang dipanggil "semak" yang akan menyemak sama ada pengguna mempunyai hak akses khusus. Untuk melakukan ini, kita perlu mentakrifkan pembolehubah berikut:
Akhir sekali, kami menggunakan kaedah $this->Acl->check() untuk menyemak sama ada peranan yang ditentukan mempunyai kebenaran untuk mengakses nod tertentu. Jika pengguna mempunyai kebenaran ini, pembolehubah $access akan ditetapkan kepada benar. Jika pengguna tidak mempunyai akses, pembolehubah akan menjadi palsu.
Kami berharap artikel ini membantu anda memahami cara menggunakan peranan ACL dalam CakePHP. Apabila anda perlu mengawal kebenaran akses pengguna yang berbeza dalam aplikasi anda, menggunakan fungsi ACL dalam CakePHP ialah pilihan yang sangat baik.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan peranan ACL dalam CakePHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!