私はこのチュートリアルに基づいて構築しました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';
}
}
}