ホームページ >バックエンド開発 >PHPチュートリアル >CakePHP で ACL ロールを使用するにはどうすればよいですか?

CakePHP で ACL ロールを使用するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-06-04 18:21:03877ブラウズ

CakePHP は、包括的な権限制御メカニズム、つまりアクセス制御リスト (ACL) を提供する人気のある PHP 開発フレームワークです。 ACL を使用すると、アプリケーション内の各ユーザーのアクセス権を制御するのに役立ちます。この記事では、CakePHP で ACL ロールを使用する方法について説明します。

  1. ACL コンポーネントの設定

まず、CakePHP で ACL コンポーネントを設定する必要があります。次のコードを app_controller.php に追加します。

//引入Auth Component
var $components = array('Acl', 'Auth');

//初始化AclComponent
function initialize()
{
    $this->Acl->initAcl();
}      
  1. ACL ロールの作成

CakePHP で ACL を使用するには、ロールと権限ルールを作成する必要があります。まず、ACL ロールを作成する必要があります。コントローラーで次のコードを使用できます。

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'));
}

上記のコードでは、ユーザーがフォームを送信すると、コードによってデータベースに新しい ACL ロールが作成されます。 $this->Acl->Aro->save() メソッドは、これに関連するすべての権限を処理し、新しいロールをデータベースに追加します。

  1. ロールに権限を割り当てる

次に、ロールに権限を割り当てる必要があります。これを行うには、データベースに ACL ノードを作成し、それを必要なロールに割り当てる必要があります。このようにして、ロールはノードにアクセスできるようになります。次のコードを使用して ACL ノードを作成できます:

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));
}

上記のコードでは、「Parent」という名前の空のノードを作成しました。このノードは関数を含まないプレースホルダーであり、その下に子ノードを追加できます。このノードの下に子ノードを追加すると、これらの子ノードは親ノードの権限を継承します。

  1. ユーザー権限の確認

最後に、ユーザーが特定の ACL ノードへのアクセス権限を持っているかどうかを確認するコードを記述する必要があります。このために、次のコードを使用できます。

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);
   }
}

上記のコードでは、ユーザーが特定のアクセス権を持っているかどうかを確認する「check」というアクションを定義しました。これを行うには、次の変数を定義する必要があります。

  • $aro: チェックする ACL ロールを示します
  • $aco: チェックする ACL ノードを示します
  • $access : ユーザーがノードにアクセスする権限を持っているかどうかを示します

最後に、$this->Acl->check() メソッドを使用して、指定されたロールが適切かどうかを確認します。特定のノードにアクセスする権限を持っています。ユーザーがこの権限を持っている場合、$access 変数は true に設定されます。ユーザーがアクセス権を持たない場合、変数は false になります。

この記事が、CakePHP での ACL ロールの使用方法の理解に役立つことを願っています。アプリケーション内でさまざまなユーザーのアクセス権を制御する必要がある場合、CakePHP の ACL 関数を使用することは非常に良い選択です。

以上がCakePHP で ACL ロールを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。