うめぼしジョイスティック - ivoice

CakePHP、JavaScript、jQuery等のプログラミングについて書いていきます 思考は、うめぼしのように硬く、そして柔らかく。

CakePHP2系のACLプラグインでログアウトユーザにアクションを許可するためのコード(方法)

※筆者は

CakePHP2でACLを超簡単管理できるプラグイン「ACL Plugin 2」 - たきゃはしです

このサイトの情報からACLプラグインを使っていましたが、2015年6月現在 ACLプラグインであるPlugin ACLダウンロードできない状態になっています。

2015年7月追記

Alaxos ACL Plugin for CakePHP version2.3.0は

公式では入手不可となっていますが(サイトがなくなっている)

非公式ですが、ここ

https://github.com/oldskool/Acl

github.com

からダウンロードできます!

ACLの情報に関してご存知の方はコメント下さい。)

ACLプラグインを入れた場合には、 AppController.phpの中身は

<?php
App::uses('Controller', 'Controller');


class AppController extends Controller {

    public $components = array(
        'Acl',
        'Auth' => array(
            'authorize' => array(
                'Actions' => array('actionPath' => 'controllers')
            )
        ),
        'Session'
    );

    public $helpers = array('Html', 'Form', 'Session');



    public function beforeFilter() {

        $this->set('auth', $this->Auth);
        //viewからもAuthを使えるようにする。
        //これをコメントアウトすると全体的にサイトが見れなくなります。


        //AuthComponentの設定
        $this->Auth->loginAction = array('controller' => 'コントローラー', 'action' => 'アクション');
        //ログイン失敗するとここに飛ぶ

        $this->Auth->logoutRedirect = array('コントローラー' => 'users', 'action' => 'アクション');
//ログアウトしたらここに飛ばす
        $this->Auth->loginRedirect = array('controller' => 'コントローラー', 'action' => 'アクション');//ログインしたらここに飛ばす

    }

}

こんな感じになります。

また、AppController以外のそれぞれのコントローラーの

public $components={}

には "Auth"と絶対に書いてはいけません!!

既にAppControllerで書いてあるからです。

それぞれのコントローラーでは、beforeFilterというものを用いて、 一般ユーザー(ログインしていないユーザー)にどこまでアクションを許可するかを 決めることができます。

書き方は、アクションと同列の階層に

<?php
    public function beforeFilter(){

            $this->set('userSession', $this->Auth->user());
            $this->Auth->allow(
                                'index',
                                'view'
                                );

            $this->set('auth', $this->Auth);//

            // ロボット避け(必要な場合)
            // $this->set('robots_for_layout','noindex');
            // ロボット避け

    }

上記のように書きます。 この場合、 indexアクションとviewアクションを許可しているのが分かります。

最後のアクション'view'のうしろにはカンマが付いていないことに注意しましょう。 もし許可したいアクションが1つの場合はカンマは要りません。

以上です。