2014-11-05 6 views
1

В настоящее время я работаю над API для получения данных в форме JSON из нашей базы данных. Я решил принудительно выполнить проверку перед извлечением данных.Проверка входа администратора или нет в OpenCart

Потому что я использую OpenCart, мне предлагается функция, называемая isLogged().

Однако, от того, что я знаю, есть два isLogged():

  1. isLogged() для пользователя, который является администратором, при этом пути:

    opencart/upload/system/library/user.php

  2. isLogged() для Заказчик, по этому пути:

    opencart/upload/system/library/customer.php

Использование isLogged() есть (насколько я сейчас знаю) зависит от того, где мой контроллер. В настоящее время я развиваюсь под /opencart/upload/catalog/controller/api/order.php, который по определению находится на стороне customer. Таким образом, я не могу использовать $this->user->isLogged(), а вместо этого должен использовать $this->customer->isLogged(), что противоречит точке проверки администратора.

Если я пытаюсь использовать $this->user->isLogged(), я получаю следующее сообщение об ошибке:

PHP Fatal error: Call to a member function isLogged() on a non-object in /vagrant/opencart/upload/catalog/controller/api/order.php

Как, не двигая мой контроллер для admin, проверки, был ли администратор вошел в систему или нет? Или я совершенно неправ в своем анализе?

EDIT: Похоже, я неправильно понял требования к проекту. Это не имеет никакого отношения к проверке пользователей OpenCart, но проверка пользователя из другой внутренней системы.

+1

Если вы заглянете в файлы 'index.php' как для интерфейса, так и для администратора, вы увидите, что в одном только объект клиента i (frontend), а во втором зарегистрирован только пользовательский объект (admin). Вот почему вы не можете вызывать '$ this-> user-> isLogged()' на стороне интерфейса. Какую проверку вы хотите сделать? Обычно внешний интерфейс не должен знать о присутствии администратора и наоборот. То, что вы можете сделать на интерфейсе, - это прямая проверка для просмотра: 'isset ($ this-> session-> data ['user_id'])' должен предоставить вам необходимую вам информацию. – shadyyx

+0

Выполняя некоторые из моих собственных тестов, я обнаружил, что после входа в интерфейс вы можете использовать '$ this-> customer-> isLogged()', чтобы проверить, вошли ли они в систему или нет (я просто использовал простой true/false, учитывая условие isLogged()). Я также проверил, что функции в библиотеке/клиенте работают, учитывая, что клиент вошел в систему. Однако я немного запутался с целью 'session'. Связан ли этот объект с этой конкретной сессией? Я заметил, что в 'checkout/confirm' он используется очень часто - зачем и когда следует использовать' session' над 'customer-> getSomething()'? – theGreenCabbage

+2

'isset ($ this-> session-> data ['user_id'])' был предположительно ** только **, чтобы проверить, включен ли администратор (бэкэнд-пользователь). Если вы находитесь в интерфейсе и работаете только с клиентом , используйте его getters/seters. – shadyyx

ответ

2
$this->session->data['isAdminLogin'] = 0; 
    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { 
     $this->session->data['token'] = md5(mt_rand()); 
     $this->session->data['isAdminLogin'] = 1; 

     if (isset($this->request->post['redirect'])) { 

      $this->redirect($this->request->post['redirect'] . '&token=' . $this->session->data['token']); 
     } else { 

      $this->redirect($this->url->link('common/home', 'token=' . $this->session->data['token'], 'SSL')); 
     } 
    } 

Заменить общий код функции/login.php index с этим. Теперь проверьте adminlogin с этим

$this->session->data['isAdminLogin'] 
1

в версии 2.XX

использование вставить этот код в /index.php

// User 
$registry->set('user', new User($registry)); 

и использовать этот код для проверки авторизации администратора

//Checks to see if the logged in user has permission to view or edit a particular admin page. 

    $this->user->isLogged(); 

    //Checks to see if the admin user is logged into their account. 

    $this->user->getId(); 

    //Gets the ID number of the administrator account. 

    $this->user->getUserName(); 
1

Opencart 1.5.x

Например, если вы хотите, чтобы посетители, перейдите по ссылке, чтобы не видеть выбор языка только для администратора, вы войдете /catalog/controller/common/header.php

 // Show if logged in as admin 
     $this->load->library('user'); 

     $this->user = new User($this->registry); 

сказать после того, как «защищенный function index() {"и сохраните его.

Затем откройте шаблон:

/catalog/view/theme/*/template/common/header.tpl

<?php echo $language; ?> 

вы собираетесь заменить:

<?php if($this->user->isLogged()){echo $language;} ?> 

И ready ...

Смежные вопросы