2

私はこのチュートリアルに基づいて構築しましたhttp://www.jamesfairhurst.co.uk/posts/view/creating_an_admin_section_with_cakephp_updated

現在、私のアプリケーション用に機能的で非常に充実した管理セクションがあります。

先見の明が悪いため、予約などを表示できる自分のホームページにログインできる必要がある通常のユーザーを考慮していません。

適切なデータベースを設定し、認証用の「ロール」フィールドを含めました。私もcakePHP独自の「auth」の例に従いましたが、さまざまなエラーをスローせずに実装することができませんでした。この段階では、ログインシステムの構造をあまり変更したくないので、そのようなものになる可能性があります。頭痛が早い!!

私はチュートリアルの元の作者と話をしましたが、彼はuser_controller.phpファイルに追加されたいくつかの単純なロジックで十分であることに同意しています。

基本的に私は次の行に沿って何かが必要です: "if user =='user' THEN redirect to'user_index.php'簡単に言えば、以下はuser_controller.phpの現在のLOGIN関数です

function login() {
        if(!empty($this->data)) {
            // unset unrequired validation rules
            unset($this->User->validate['username']['check_username_exists']);

            // validate form
            $this->User->set($this->data);
            if($this->User->validates()) {
                // update Last Login date
                $this->User->id = $this->User->_user['User']['id'];
                $this->User->saveField('last_login',date("Y-m-d H:i:s"));

                // save User to Session and redirect
                $this->Session->write('User', $this->User->_user);
                $this->Session->setFlash('You have successfully logged in.','default',array('class'=>'flash_good'));
                $this->redirect(array('action'=>'index','admin'=>TRUE));
            }
        }
    }

すべての検証はuser.phpモデルで処理され、認証をリダイレクトするためのロジックがapp_controller.phpにあります。これは以下に含まれています。

app_controller.php

class AppController extends Controller {
    // class variables
    var $_User = array();


    /**
     * Before any Controller action
     */
    function beforeFilter() {
        // if admin url requested
        if(isset($this->params['admin']) && $this->params['admin']) {
            // check user is logged in
            if( !$this->Session->check('User') ) {
                $this->Session->setFlash('You must be logged in for that action.','flash_bad');
                $this->redirect('/login');
            }

            // save user data
            $this->_User = $this->Session->read('User');
            $this->set('user',$this->_User);

            // change layout
            $this->layout = 'admin';
        }
    }
}
4

1 に答える 1

0

アプリケーションで同様の問題に直面しました。User モデルでは、データベースからロールを取得するだけの getRole() メソッドを作成し、switchステートメントを使用してユーザーを正しいコントローラーにリダイレクトしました。

別のアプローチとして、ユーザー テーブルに列を追加するだけisAdminです (デフォルト 0、1 は管理者を示します)。まだ管理者が多すぎないと仮定すると、手動で管理者を設定できます。コントローラーでは、フィールドとそれに応じてリダイレクトを確認するだけで済みます。

于 2013-01-22T21:27:58.093 に答える