--

--

コメント

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
管理者にだけ表示を許可する

この記事のトラックバックURL

http://welcomevac201world.blog84.fc2.com/tb.php/31-98d9aae7

11

20

コメント

AuthとACL使うと、毎回設定に1日くらいかかるのは、同じことをやってしまうから。。。

CakePHPでログイン認証とか権限関係の処理は、
AuthコンポーネントとACLを使うのですが、
毎回失敗するのでメモ。


例えば、groupsテーブルに
id=1, name='一般利用者'
id=2, name='店舗担当者'
id=3, name='管理者'
と入れた場合、

arosテーブルには
parent_id | model | foreign_key | alias | lft | rght
NULL       Group   1                NULL  1   2
NULL       Group   2                NULL  3   4
NULL       Group   3                NULL  5   6
と入れる。

基本、これでOK。
arosテーブルはmodel→GroupテーブルかUserテーブルの名前、
foreign_keyにそのmodelのidが入ります。
なので、グループを格納するテーブル名がorganizations(組織??)とかなら
'Organization'を設定。


んでモデルのUserに↓を追加

    function parentNode() {
        if (!$this->id && empty($this->data)) {
            return null;
        }
        $data = $this->data;
        if (empty($this->data)) {
            $data = $this->read();
        }
        if (!$data['User']['group_id']) {
            return null;
        } else {
            return array('Group' => array('id' => $data['User']['group_id']));
        }
    }

    /**    
     * After save callback
     *
     * user の aro を更新する *
     * @access public
     * @return void
     */
    function afterSave($created) {
            if (!$created) {
                $parent = $this->parentNode();
                $parent = $this->node($parent);
                $node = $this->node();
                $aro = $node[0];
                $aro['Aro']['parent_id'] = $parent[0]['Aro']['id'];
                $this->Aro->save($aro);
            }
    }



モデルのGroupクラスに↓これを追加

function parentNode() {
        return null;
    }



そして、マニュアルに記載されている
自動化ツールとしてAclsControllerを作成
中身はこちらの2点
function build_acl
http://book.cakephp.org/ja/view/647/An-Automated-tool-for-creating-ACOs

function initdb
http://book.cakephp.org/ja/view/648/Setting-up-permissions


あとは全機能のControllerをfunctionだけ全部作って、
/acls/build_acl
を実行後、
/acls/initdb
を実行。

acosテーブルとaros_acosテーブルに
データが格納されたことを確認する。

最後に、まじめに作ったログイン画面でユーザ登録し、
arosテーブルが
id | parent_id | model | foreign_key | alias | lft | rght
1   NULL       Group   1                NULL  1   4
2   NULL       Group   2                NULL  5   6
3   NULL       Group   3                NULL  7   8
4   1             User     1                NULL  2   3
となれば、ACLの準備完了☆-(ノ゚Д゚)八(゚Д゚ )ノイエーイ

あとはAppControllerのbeforeFilterに
Authの設定を記述し、
ログインが不要な機能があれば、
その画面のコントローラのbeforeFilterで

    function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allowedActions = array('*');
    }


*のところは、各function名にすると、そこだけになるので、
個別指定も可能。
その時はbeforeFilterも記載しないと、
そこで画面真っ白になったはず(うろ覚え)。


毎回arosにグループのデータを入れ忘れたり、
グループのノードを考慮し忘れたりしちゃうので
そうするとユーザ登録した時に
arosに変なデータができちゃうか、
arosにデータが作成されずに、ログイン後画面が見れないです。

うっかりも積もれば1日かかっちゃうこともあったので、
この辺は一つずつミスらないようにしないとなぁと
毎回思うんですが、もう3回も同じことしてる(´∀`*)
関連記事
スポンサーサイト
管理者にだけ表示を許可する

この記事のトラックバックURL

http://welcomevac201world.blog84.fc2.com/tb.php/31-98d9aae7

ようこそ!

ブロとも申請フォーム

ブロ友申請大歓迎です!
一覧に表示されるので自動で相互リンクになります!

>> ブロ友申請はこちら <<

検索フォーム

最近のコメント

メールフォーム

名前:
メール:
件名:
本文:

FC2ブログランキング

人気ブログランキング

人気ブログランキング

ブログ村

アクセスランキング

[ジャンルランキング]
育児
610位
アクセスランキングを見る>>

[サブジャンルランキング]
パパ育児
42位
アクセスランキングを見る>>

やーんは今、

ブロとも一覧

Designed by

Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。