CakePHP 2.0でユーザーのアクセス権限をチェック。
CakePHP 2.0 RC3でブログのサンプル、ACLを設定した後に、各コントローラーでアクセス権限をViewのテンプレートファイル内(View/Posts/index.ctpなど)でチェックするためのコードメモです。
ブログのサンプル、ACLについてはCakePHPマニュアルページの中にあるチュートリアルを参考に設定してみました。(ACLチュートリアルの説明は難解ですね。かなり苦戦しました・・・。)
CakePHPブログチュートリアル(英語)
ACL を制御するシンプルなアプリケーション(英語)
チュートリアルで作成したブログのコントローラ「PostsController.php」のbeforeFilter()の中に下記のコードを記述することで、閲覧しているユーザーのアクセス権限をチェックし、「create」「read」「update」「delete」の各アクションの権限の有無を配列にして、Viewへ渡すデータにセットするようにしています。
1 2 3 4 5 6 7 8 |
function beforeFilter() { $acl = array(); $action = array('create', 'read', 'update', 'delete'); foreach ($action as $value) { $acl[$value] = $this->Acl->check($this->Auth->user('username'), 'posts', $value); } $this->set('acl', $acl); } |
Viewのテンプレート上では次のように利用できます。
1 2 3 |
if ($acl['create']) { echo $this->Html->link('Add Post', array('action' => 'add')); } |
ユーザーの権限によって、編集や削除のリンクを、表示/非表示にしたい場合などに使えるかなと思います。
他にもっと良い方法があるかもしれませんが・・・。