2011年6月16日木曜日

cakephp Plugin ACL でハマる


散々間を開けて投稿します。cakephpについてです。



高橋です

上のサイトを参考に(チョー助かった。ありがとうございます。)Plugin ACLの導入を進めていたがはまった。

まず、cakephpのcookbookの開発事例11.2 ACL を制御するシンプルなアプリケーションをすすめる。

グダグダ言わず全部やる。

その時ユーザー、グループの登録を焦ってやらない。ちゃんとcookbookの手順通りにユーザー、グループの登録をする。



http://ドメイン/admin/aclにアクセスする所でツマづいた。

アクセスしても確か

Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check. Node references:以下略なんたらかんたらが出てきて何も出来ない。

色々と調べた結果、原因は結局プラグインのACLを追加したのに、acosテーブルにはadmin/acl等が追加されてないので、cakephpがとにかくアクセス禁止にしていたよー。(多分)



対処方法1は


  • app/app_controller.php


のbeforeFilter()関数に

parent::beforeFilter();

$this->Auth->allow('*');

を追加する。これはフィルタリング始める前にauthコンポーネントのアクセス許可を、とにかく全てOKにするよという処理(多分)。

(もちろん正しい設定をした後は削除かコメントアウトする。)


そしたら「admin/acl」にアクセス出来るようになった。

で!まだ油断しない!Plugin ACLを利用してacoを追加する。(高橋です。のページの「Actions」→「Build actions ACOs」→「Build」←これね)

その時リンクされているBuildをクリックしないと追加されないので注意。

これでadministrators権限を持っているユーザーなら、対処方法1を削除してもhttp://ドメイン/admin/aclにアクセスできる。



あー、3日悩んだ。…時間かかり過ぎだろオレ…




PluginACL自体はチョーグッド!!




---その後思いついた事です。---

対処方法の2。試してないけど

  • app/plugin/acl/controllers/acl_controller.php

  • app/plugin/acl/controllers/acos_controller.php

  • app/plugin/acl/controllers/aros_controller.php


の3つのファイルのbeforeFilter()関数に


parent::beforeFilter();

$this->Auth->allow('*');

を足せばよかったかも。