Hatena::ブログ(Diary)

高橋です このページをアンテナに追加 RSSフィード Twitter

2010年12月22日

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


  2011年3月15日

  実際の開発に導入して問題なく動作しましたので、動作環境を追記しました。

  2011年2月22日

  プラグイン導入前に作っておくべき項目を追加、また全体的に推敲しました。


f:id:y_guriko:20101222173637j:image:w300

情報量が少ないCakePHPのACL関連


昨日から公式のチュートリアルを参考に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 にアクセスする。

↓のような画面が表示される。

f:id:y_guriko:20101222165240j:image:w300


もし、以下のエラーが表示された場合は、

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で、アクセスコントロールオブジェクトのこと。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/y_guriko/20101222/p1