
Статья ориентирована на начинающих Codeigniter-щиков, таких как я.
В процессе создания внутреннего сайта одной из российских компаний, возникла необходимость ограничить доступ пользователей к некоторым страницам, функциям. Так, как в компании существует домен — возникло желание сделать авторизацию именно в нем.
Найти самостоятельно информацию в принципе не трудно. Поисковые системы еще ни кто не отменял. Я просто решил собрать найденные кусочки и объединить их в один, на русском языке.
Допустим, что CI уже установлен и настроен. Кстати, на одном из западных сайтов, доступно 16 очень хороших и исчерпывающих видео уроков по настройке и использованию Codeigniter-а.
Добавим библиотеку и конфигурационный файл
Конечно, существуют некоторые функции в самом PHP, но использовать их не всегда рационально. За основу возьмем библиотеку adLDAP. В ней есть все необходимое и даже больше.
Первым делом создадим конфигурационный файл, например adldap.php и положим его в \system\application\config\
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['account_suffix'] = '@dom.ru';
$config['base_dn'] = 'DC=dom,DC=ru';
$config['domain_controllers'] = array ("DC01.dom.ru");
$config['ad_username'] = 'web_user';
$config['ad_password'] = 'web_passS8';
$config['real_primarygroup'] = true;
$config['use_ssl'] = false;
$config['use_tls'] = false;
$config['recursive_groups'] = true;
Далее необходимо добавить библиотеку. Но как сделать так, что бы ей можно было пользоваться в CI, как остальными? За нас это уже сделал один программист, и предоставил для общественного пользования (он утверждает, что лицензия не нарушена). Ее мы и добавим в \system\libraries\ и назовем, например Adldap.php.
После выше описанных манипуляций библиотекой можно пользоваться в Codeigniter-е, как и другими, например:
$this->load->library('Adldap');
$this->adldap->authenticate($username, $password);
Напишем небольшой код авторизации
Сделать это проще простого.
Во-первых, создадим форму для ввода логина и пароля:
// "_" конечно надо убрать
<form_ action="http://info.dom.ru/login/gateway" method="post">
<input_ name="username" type="text" value="Логин">
<input_ name="password" type="password" value="Пароль">
<input_ type="submit" name="submit" value="Войти" >
</form_>
Во-вторых, контролер и саму функцию для авторизации в домене. Но домен большой и пользователей много и если просто проверять пароль и логин, то к ограниченным частям сайта будут иметь доступ все члены домена.
Для более тонкой настройки нужен еще один параметр — группа (Active Directory). Назовем ее, например Web_Group, и добавим нужных нам пользователей.
Примерный код авторизации:
<?php
//Создаем контроллер
class login extends Controller {
//Функция для проверки логина, пароля и группы
function gateway() {
//Подключаем библиотеку
$this->load->library('Adldap');
//Проверяем логин и пароль
$authUser = $this->adldap->authenticate($this->input->post('username'), $this->input->post('password'));
//проверяем наличие пользователя в группе
$groupinfo = $this->adldap->user_ingroup($this->input->post('username'), 'Web_Group', 'NULL');
//В случае если $authUser и $groupinfo истина
if ($authUser === true and $groupinfo === true) {
//добавляем информацию в массив сессии о том, что проверка успешна и доступ к определенным ресурсам открыт
$data = array('username' => $this->input->post('username'), 'usergroup_access' => 'Web_Group', 'is_logged_in' => true);
$this->session->set_userdata($data);
redirect();
} else {
echo "Ошибка авторизаци";
}
}
}
Вот и все. Теперь в любой другой функции можно делать проверку и в зависимости от результата предоставлять или не предоставлять доступ.
Примерно должно выглядеть так:
function view_data() {
//Из массива сессии вытаскиваем и проверяем прошел или нет пользователь авторизацию
if ($this->session->userdata('is_logged_in') == true) {
echo "Доступ к данным открыт";
} else {
echo "Доступ закрыт";
}
}
Теперь осталось только дописать функцию уничтожения сессии (Logout):
function logout() {
$this->session->sess_destroy();
redirect();
}
Спасибо за внимание.