データベースには、Admins と Users の 2 つのテーブルがあります。管理者は、9 つのコントローラーがある管理者パネルのみを開く必要があります。ユーザーには、「HomeController」というコントローラー名が 1 つあるフロント エンドが表示されます。
ユーザーがログインすると、管理者専用のコントローラーにアクセスできます。また、管理者がログインすると、ユーザー専用のコントローラーを開くことができます。これを防ぐにはどうすればよいですか?
AppController:
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'authenticate' => array(
'Admin' => array(
'userModel' => 'Admin',
'fields' => array(
'username' => 'username',
'password' => 'password'
)
),
'User' => array(
'userModel' => 'User',
'fields' => array(
'username' => 'username',
'password' => 'password'
)
)
)
)
);
public function beforeFilter()
{
}
}
TransactionsController: (管理者がアクセスします)
public function beforeFilter()
{
$this->Auth->loginRedirect = array('controller' => 'items', 'action' => 'index');
$this->Auth->logoutRedirect = array('controller' => 'admins', 'action' => 'login');
$this->Auth->loginAction = array('controller' => 'admins', 'action' => 'login');
// Basic setup
$this->Auth->authenticate = array('Form');
// Pass settings in
$this->Auth->authenticate = array(
'Form' => array('userModel' => 'Admin')
);
}
public function isAuthorized($admin)
{
if(isset($admin['Admin']['id']))
{
return true;
}
return false;
}
HomeController: (ユーザーがアクセスする)
public function beforeFilter()
{
$this->Auth->loginRedirect = array('controller' => 'home', 'action' => 'index');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
// Basic setup
$this->Auth->authenticate = array('Form');
// Pass settings in
$this->Auth->authenticate = array(
'Form' => array('userModel' => 'User')
);
$this->Auth->allow('view', 'index', 'item', 'itemlist', 'search');
}
public function isAuthorized($user)
{
if(isset($user['User']['id']))
{
return true;
}
return false;
}