2014-02-12 2 views
0

Я хочу сделать заявку, в которой пользователи могут входить в систему как обычно и в фоновом режиме, где администраторы могут войти в систему.Администратор Cakephp и пользовательский логин отдельно

До сих пор я создал это:

routes.php

$prefix = 'admin'; 

Router::connect(
    "/{$prefix}/:plugin/:controller", 
    array('action' => 'index', 'prefix' => $prefix, $prefix => true) 
); 
Router::connect(
    "/{$prefix}/:plugin/:controller/:action/*", 
    array('prefix' => $prefix, $prefix => true) 
); 
Router::connect(
    "/{$prefix}/:controller", 
    array('action' => 'index', 'prefix' => $prefix, $prefix => true) 
); 
Router::connect(
    "/{$prefix}/:controller/:action/*", 
    array('prefix' => $prefix, $prefix => true) 
); 

AppController:

public $components = array(
    'DebugKit.Toolbar', 
    'Session', 
    'Auth' => array(
     'loginRedirect' => array(
      'controller' => 'pages', 
      'action' => 'display' 
     ), 
     'logoutRedirect' => array(
      'controller' => 'pages', 
      'action' => 'display', 
      'home' 
     ), 
     'authorize' => 'Controller', 
     'authError' => 'Access denied! Did you really think that you can access that?' 
    ) 
); 

public function isAuthorized($user) { 
    // Admin can access every action 
    if (isset($user['role']) && $user['role'] === 'admin') { 
     return true; 
    } 

    // Default deny 
    return false; 
} 

public function beforeFilter() { 
    $this->Auth->allow('display'); 
    //$this->recordActivity(); 
    if($this->request->prefix == 'admin'){ 
     $this->layout = 'admin'; 
    } 
} 

С этим, когда я пытаюсь получить доступ к страницам на переднем конце, который нуждается в аутентификации дает me login(), но когда вы пытаетесь получить доступ/admin, он перенаправляет меня на/users/login.

Я хочу иметь две отдельные системы входа с различной планировкой. Один для обычных пользователей и один для пользователей admin.

Помогите пожалуйста?

ответ

2

Я не рекомендую два действия login() только ради другого вида. Вы можете переместить оператор if из своего beforeFilter() в UsersController::login(), чтобы правильно настроить раскладку. Тем не менее, если вы хотите продолжить с отдельными действиями, установите AuthComponent::loginAction недвижимость в AppController::beforeFilter() как:

if($this->request->prefix == 'admin'){ 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'admin_login', 'plugin' => false); 
} 

где admin_login будет другое действие, которое вы создаете в UsersController.

На боковой ноте я рекомендую использовать маршрутизацию префикса по умолчанию, указанную в book. Он очень похож на то, что вы сделали, но вам не придется вручную создавать маршруты. Кроме того, как указано в этом документе, для доступа/администратора вам необходимо будет определить маршрут, например:

Router::connect(
    '/admin', 
    array('controller' => 'pages', 'action' => 'index', 'admin' => true) 
); 
Смежные вопросы