1

これは、特定の問題の解決策ではなく、意見を求める質問です。

私は初めて CakePHP を使用しており、現在サイトの管理部分に取り組んでいます。

MVC または CakePHP の開発者として、管理機能をどこに配置したいですか?

最初はそれらを AdminController に入れていましたが、その後、操作されるデータのタイプを対象としたコントローラーに関数を入れるように変更されました。たとえば、ユーザーのリスト/編集を UserController に配置します。

UserController には便利な機能がある可能性が高いため、これはより理にかなっています。

返信を残す場合は、その理由を一言添えていただけますか? おそらくそれは論点です。

気をつけて、リー

- 編集

if ($this->Auth->user('user_type') == 1){//double-check the user is Admin
            $this->Auth->allow('display');
            $this->Auth->allow('watch');
4

1 に答える 1

10

論点ではないと思います。管理機能をそれぞれのコントローラに配置し (つまり、すべてを 1 つの「管理」コントローラにまとめる必要はありません)、Cake に組み込まれている「管理」プレフィックス ルーティングを使用して、それらを安全に保ちます。これは CakePHP が承認した方法であり、CakePHP では Bake コンソールを介してこの方法で管理機能を作成できます。

AppController で数行の単純なコードを使用して、admin_ で始まるすべてのコントローラー機能を保護できます。すべての管理機能は、次のような整然とした一貫した URL を介してアクセスできます

これで始められるはずです:http://book.cakephp.org/2.0/en/development/routing.html#prefix-routing

さらにサポートが必要な場合はお知らせください。詳細情報で回答を更新します。

編集:詳細...

管理ルーティングを設定する手順は次のとおりです。

1/ app/Config/core.php の 113 行付近で、次の行が存在し、コメントが解除されていることを確認します。

    Configure::write('Routing.prefixes', array('admin'));

2/ app/Controller/AppController.php (つまり、コントローラーのスーパークラス) で、beforeFilter メソッドの管理ルーティングをテストします。これを各コントローラーの beforeFilter で実行しないでください。これは、DRY 原則に準拠していません。例として、私の前のフィルターメソッドを次に示します。

function beforeFilter() {
    if (isset($this->request->params['admin'])) {
            // the user has accessed an admin function, so handle it accordingly.
        $this->layout = 'admin';
        $this->Auth->loginRedirect = array('controller'=>'users','action'=>'index');
        $this->Auth->allow('login');
    } else {
            // the user has accessed a NON-admin function, so handle it accordingly.
        $this->Auth->allow();

    }
}

3/ すべての管理機能の前に admin_ を付けると、プレフィックス ルーティングを介して自動的に利用できるようになります。

例えば。

function admin_dostuff () { echo 'hi from the admin function'; } // This will be available via http://www.example.com/admin/my_controller/dostuff

function dostuff () { echo 'hi from the NON-admin function'; } // This will be available via http://www.example.com/my_controller/dostuff

セットアップが完了したら、admin 関数の前に admin_ を付けるだけで、Cake がすべて処理してくれます。わかる?

編集2:

あなたの状況に役立つはずの簡単に書かれたサンプルコードを次に示します。

function beforeFilter() {
    if (isset($this->request->params['admin'])) {
        // the user has accessed an admin_ function, so check if they are an admin.
        if ($this->Auth->user('user_type') == 1){
            // an Admin user has accessed an admin function. We can always allow that.
            $this->Auth->allow();
        } else {
            // A non-admin user has accessed an admin function, so we shouldn't allow it.
            // Here you can redirect them, or give an error message, or something
        }
    } else {
        // the user has accessed a NON-admin function, so handle it however you want.
        $this->Auth->allow(); // this example gives public access to all non-admin functions.
    }
}
于 2012-07-04T07:38:16.233 に答える