Как реализовать привилегии доступа и проверку пользователей в каждом контроллере, использующем Codeigniter?

я использую Ion_Auth библиотека. И я обнаружил, что здесь легко реализовать аутентификацию. Но мой вопрос: как я могу использовать это для выполнения проверки на каждом контроллере?

В моей административной части у меня есть несколько пользователей, но каждый пользователь относится к определенной группе. Означает, что ни один пользователь не будет назначен для нескольких групп. Когда я проверил ion_auth Пользователь может принадлежать нескольким группам. В этой части я просто получаю значение от index 0 и сделать его в качестве основного типа группы.

public function __construct() {

parent::__construct();

$this->load->library('my_auth');

$user_groups = $this->ion_auth->get_users_groups()->result_array();
$get_user_group = $user_groups[0]['id']; //hard coded!!! still finding a good way to prevent this

if (!$this->ion_auth->logged_in()) {
redirect('auth/login');
}

if (!$this->ion_auth->is_admin()) {
redirect('error/error_privilege');
}

$this->data['options'] = array(
'active_menu'   =>  'dashboard'
);

}

И еще одна вещь, которую я хочу, — как я могу сделать это, не включая все эти коды в каждый контроллер, для которого я хочу пройти аутентификацию?

Что я хочу, это выполнить аутентификацию

  • сначала проверить, если пользователь логин или нет
  • Следующим является проверка того, что они типа группы

После получения типа группы, как я могу ограничить просмотр страницы?
Моя идея — после входа в систему, и если пользователь действителен, я назову его тип группы и сохраню его в сеансе. И я включу переменную flag с идентификатором группы пользователей (жестко запрограммированную) в конкретном представлении, и из этого я могу подтвердить просмотр страницы.

Просто так: здесь у меня есть меню навигации

Входящий список

Исходящий список

Входящий список
Исходящий список

И для конкретного контроллера

//inbound controller
public function __construct() {
parent::__construct();
$group_type = 1;
if(!$this->session->userdata('group_type') == 1) {
//warn user or redirect
}
}

Можете ли вы предложить мне лучший способ реализовать этот тип проверки?

0

Решение

Все ваши контроллеры должны расширять контроллер по умолчанию, который содержит всю логику, примененную до того, как произойдет рендеринг или манипулирование данными.

class PageController extends DefaultController {
/*
* logic for pages!
*/
}

куда DefaultController на самом деле расширяет базу Controller

class DefaultController extends Controller {
/**
* And also checks the authorization as well
*/
public function __construct(){
//logic to check roles etc.

//redirect and flash session if failed, otherwise just return.
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]