たきゃはしです

もう日常ブログにしよう

CakePHP - ACLの権限管理を超簡単にするプラグイン『Plugin ACL』



CakePHP2.0に対応した新しい「Plugin ACL」に関する記事はこちらです
CakePHP2でACLが超簡単に管理できるプラグイン「Alaxos - Plugin ACL 2.0」まとめ



情報量が少ないCakePHPACL関連


昨日から公式のチュートリアルを参考にACL*1の構築に取り組んでおりまして


ARO*2とかACO*3をマニュアル通りにレコード追加してたけど、これは辛い!
aros_acosテーブルも自作関数で1とか0とか-1とか・・・


なんとか完成しましたが、これではイカン・・・と思いました

『Plugin ACL』のダウンロード


公式フォーラムで紹介されていました。英語サイトです。

感想、Plugin ACL は利用者に優しいプラグイン


まず、ACOのレコードがボタンひとつで自動生成!


アクセス権限(パーミッション)の設定についても、○と☓を切り替えるだけ!
またAjax対応でページ遷移なしって具合です。これは素敵

プラグイン導入前に作っておくべき項目

  • テーブルの作成(users、groups、aros、acos、aros_acos
  • ACLビヘイビアで関連付け(arosとusers、arosとgroups)
    • var $actsAs = array('Acl' => array('requester'));
  • userモデルとgroupモデルでparentNode()を作る
  • アソシエーションの設定(userモデル、groupモデル)
    • User belongsTo Group
    • Group hasMany User
  • Bakeしたフォームからグループとユーザーを追加(自動的にAroが追加されていればOK)
  • Authコンポーネントの利用、ログイン機能(app_controller.php
  • コントローラのパスを設定する(app_controller.php
    • $this->Auth->actionPath = 'controllers/';
  • 外部オブジェクトを指定する(app_controller.php
    • $this->Auth->authorize = 'actions';

『Plugin ACL』の導入


※手順の解説のみで翻訳はしません


1.ダウンロードした最新の「alaxos_acl_X.X.X.zip」の中にある「acl」フォルダを app/plugins に入れる
2.adminルーティングの設定

    • app/config/core.php の88行目の「Configure::write('Routing.prefixes', array('admin'));」を有効(コメントを外す)にする
    • app/config/routes.php に「Router::connect('/admin', array('controller' => 'acl', 'action' => 'index', 'admin' => true));」を追加する

3.bootstrap.phpの編集

    • app/plugins/acl/config/bootstrap.php のソースをコピーする
    • app/config/bootstrap.php に貼り付ける

『Plugin ACL』でAROとACOを自動構築する


1.http://ドメイン/admin/acl にアクセスする。
↓のような画面が表示される。


もし、以下のエラーが表示された場合は、
app/config/bootstrap.php の「Configure :: write('acl.check_act_as_requester', true);」を
「Configure :: write('acl.check_act_as_requester', false);」に変更し、ページを更新する

ACL plugin
The Group model is not configured to act as an ACL requester
In a classical ACL configuration, the models that represent the users and the roles must act as ACL requesters (see Acts As a Requester).
If you wish, you can disable this alert by setting the ACL plugin parameter 'acl.check_act_as_requester' to false.


2.ACOの自動生成。「Actions」→「Build actions ACOs」→「Build」
3.AROの自動生成。「Permissions」→「Build missing AROs」→「Build」


※もし、rollsテーブルではなくgroupsテーブルを作成している場合は、
app/config/bootstrap.php の「Configure :: write('acl.aro.role.model', 'Role');」を
「Configure :: write('acl.aro.role.model', 'Group');」に変更し、再度3.を実行する。

『Plugin ACL』で権限設定(aros_acosテーブルの編集)をする方法


1.「Permissions」→「Users roles」で登録済みユーザーのロール(グループ)を設定する
2.「Permissions」→「Roles permissions」で登録済みロール(グループ)の権限を設定する
3.「「Permissions」→Users permissions」で登録済みユーザーの権限を個別設定する


ACLはややこしいですが、やはりWebサービスには必要な機能だと思います。
これからもACLに関する記事は挙げていきたいと思います。


  • -

PHP 5.3
CakePHP 1.3.7

*1:Access Control Listで、アクセス制御リストのこと。

*2:Access Request Objectで、アクセスリクエストオブジェクトのこと。

*3:Access Control Objectで、アクセスコントロールオブジェクトのこと。