CakePHP2.xでACL制御(2)

90cb7eff368015e931415613143dcca3_m

前回、ACOの作成時にシェルを実行した結果、おそらくデータベースのacosテーブルに1行追加されているよう。
パーミッション設定時に全体にたいしての指定を行うためのモノっぽい。

で、今回はそのパーミッション設定について。
データベースの中身を見て、おそらくこういう感じというのが、
ARO=ユーザー権限たち
ACO=各ページたち
を設定してaros_acosテーブルでパーミッションを渡す仕組みと思われる。
ACOはコントローラ単位とアクション単位の両方を設定するよう。(ページ群、ページの両方)

■ACO作成簡素化プラグインの導入宇
しかし、これをSQL文を書いたり、DB用UIを使って登録したりなどは非常に手間がかかるので、チュートリアルではプラグインを使用するとのこと。
AclExtrasというプラグイン。CakePHP3.xでも利用できるのだろうか??
GitHubのダウンロードページ(https://github.com/markstory/acl_extras/zipball/master)からダウンロード、解凍し、app/Plugin/に配置。
app/Config/bootstrap.phpでプラグインを有効化する。

CakePlugin::load('AclExtras');

最後にコンソールでコマンドを実行する。

Console\cake AclExtras.AclExtras aco_sync

これでプラグインの使用準備が完了!(らしい!)

■プラグインを使用したパーミッションの設定方法

どこかのコントローラ内に適当なFunction名でパーミッションを記述し、そのFunctionを走らせることで実行されるよう。
パーミッションの記述ルールは以下の通り。

・許可時

$this->Acl->allow($aroAlias, $acoAlias);

・拒否時

$this->Acl->deny($aroAlias, $acoAlias);

$aroAliasにはグループのIDを変数で指定してあげる。
$acoAliasは’controllers(前回のシェルで作られたエイリアス)/コントローラ名/アクション名’で記述する。

以下がチュートリアルの記述例を元に、今回の設定用に変更したもの。
UsersController.phpに記述します。

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('initDB'); //この行は終わったあと削除できます
}

public function initDB() {
    $group = $this->User->Group;
    //管理者グループには全てを許可する
    $group->id = 1;
    $this->Acl->allow($group, 'controllers');

    //ユーザグループ
    $group->id = 2;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Users/edit');
    $this->Acl->allow($group, 'controllers/Users/logout');
    $this->Acl->allow($group, 'controllers/Answers/add');
    $this->Acl->allow($group, 'controllers/Chats/index');
    $this->Acl->allow($group, 'controllers/Chats/add');

    echo "all done";
    exit;
}

処理としては
http://localhost/xxxxx/users/initDB
にアクセスすることで、データベースにパーミッション設定を行ってくれます。便利なプラグイン。

処理内容としては、id1のグループ(管理者権限)にはすべての閲覧権限をあたえ、id2のグループ(ユーザー)には一度すべての閲覧権限をなくし(denyの部分)、その後権限のあるコントローラやアクションを設定しています。

以上でACL制御の設定終了です。

コメントを書く