Я использую CakePHP 2.3.6. В одном проекте я должен реализовать User Management System
для нескольких пользователей (Users, Admins, etc.
). На данный момент я беспокоюсь только о Admin Panel(only 1 Admin for now)
и User Panel
. Я хочу, чтобы Admin
мог получить доступ ко всем областям (включая все страницы User Panel
), а Users
должен будет login
для доступа к определенным областям (страницам), как обычно.Система управления пользователями в CakePHP 2.x ведет себя странно
Я создал 2 controllers
для Admin Panel
и User Panel
, вместо того, различный plugins
для различных user panels
. Вот код ПОЛНАЯ проекта:
AppController.php :
public $components=array('Session','RequestHandler','Auth');
public function isAuthorized($user){
if(isset($user['role']) && $user['role']==='admin')
return true;
return false;
}
UsersController.php :
public function beforeFilter(){
parent::beforeFilter();
$this->Auth->loginRedirect=array('action'=>'editProfile');
$this->Auth->logoutRedirect=array('action'=>'index');
$this->Auth->authenticate=array('Form'=>array('scope'=>array('User.role'=>"user"),'userModel'=>'User','fields'=>array('username','password')));
$this->Auth->unauthorizedRedirect=array('action'=>'login');
$this->Auth->loginAction=array('action'=>'login');
$this->Auth->deny('editCv','logout');
$this->layout='user_layout';
}
public function login(){
if($this->request->is('post'))
if($this->Auth->login()){
$this->Session->setFlash('Welcome '.$this->User->field('name',array('User.id'=>$this->Auth->user('id'))));
$this->redirect($this->Auth->redirect());
}else{
$this->Session->setFlash('Invalid username or password, please try again');
$this->set('title_for_layout','Error - Login');
}
}
public function logout(){
$this->redirect($this->Auth->logout());
}
AdminsController.php
public function beforeFilter(){
parent::beforeFilter();
$this->Auth->loginRedirect=array('action'=>'myJobs');
$this->Auth->logoutRedirect=array('action'=>'index');
$this->Auth->authenticate=array('Form'=>array('scope'=>array('User.role'=>"admin"),'userModel'=>'User','fields'=>array('username','password')));
$this->Auth->authError='Did you really think you are allowed to see that ?';
$this->Auth->unauthorizedRedirect=array('action'=>'index');
$this->Auth->loginAction=array('action'=>'index');
$this->Auth->deny('myUsers','deleteUser','logout');
$this->layout='admin_layout';
}
public function index(){
if($this->request->is('post'))
if($this->Auth->login()){
$this->Session->setFlash("<p style='margin-left:20px;color:#366;'><strong>Welcome Admin, You have successfully entered to your Admin Panel!</strong></p>");
$this->redirect($this->Auth->redirect());
}else{
$this->Session->setFlash('Invalid username or password, please try again');
$this->set('title_for_layout','Error - Login');
}
else
$this->set('title_for_layout','Admin');
$this->layout=false;
}
public function logout(){
$this->redirect($this->Auth->logout());
}
Здесь я реализую login
в обеих панелях по отдельности, потому что у меня есть 2 разных login pages
для обеих панелей. Вот почему я сконфигурировал AuthComponent
в 2 панелях индивидуально.
Теперь, что происходит в User panel(UsersController)
, пользователь не может получить доступ к любой странице без входа в систему, но я хочу, чтобы мои пользователи увидели страницу index
без регистрации.
И, когда я войти с Admin panel
(AdminsController), это заставляет меня login
странице User panel(UsersController)
«s, говоря, что я успешно вошел в мою панель администратора, но я до сих пор не могу админ-панель доступа.
Я попробовал $this->Auth->authorize('Controller')
, но такой же результат. Я думал, что allow()
или deny()
здесь будет достаточно, но не знаю, что происходит, в чем моя вина.
Прежде чем я вручную внедрил систему login/logout
с использованием Session
, и все было хорошо. Затем я подумал использовать AuthComponent
, но это сводило меня с ума.
Может ли кто-нибудь помочь мне, пожалуйста?
Благодаря
Спасибо, похоже, что это решит мою проблему. На самом деле, я попытался использовать allow() тоже, но тот же результат. И, isAuthorized() нигде не используется, я просто сохранил его здесь в соответствии с примером в документации CakePHP. Хорошо, я попробую еще раз удалить его[email protected] user221931 –
И должен ли я использовать это: $ this-> Auth-> authorize ('Controller')? –
Работает лучше, но все же ведет себя странно. Я привязываюсь к логину с панели «Администратор» и «Пользователь» в том же браузере, на одной вкладке, по одному. Это проблема ? Есть ли проблема с «cookie»? @ user221931 –