Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan peranan ACL dalam CakePHP?

Bagaimana untuk menggunakan peranan ACL dalam CakePHP?

PHPz
PHPzasal
2023-06-04 18:21:03832semak imbas

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.

  1. Mengkonfigurasi komponen ACL

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();
}      
  1. Cipta peranan ACL

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.

  1. Berikan kebenaran kepada peranan

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.

  1. Semak kebenaran pengguna

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:

  • $aro: Mewakili peranan ACL yang akan disemak
  • $aco: Mewakili nod ACL yang akan disemak
  • $access : Menunjukkan sama ada pengguna mempunyai kebenaran untuk mengakses nod

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn