Авторизация пользователей на сайте

Часто случается что нужно закрыть какие-либо разделы сайта для неавторизированных пользователей.

Схем для этого может быть несколько. Основные:

а) С отдельной базой данных пользователей.
а.1) Пользователи с равными правами
а.2) Пользователи с уровнями доступа

б) Без базы данных пользователей
б.1) один пароль на все категории
б.2) разные пароли на все категории

Сейчас рассмотрим схему с базой данных пользователей с равными правами.

Итак:
1) Нужно создать базу данных пользователей.
Идем в раздел модули, выбираем INPUT MODULES.
Внизу нажимаем на кнопку Install Module и вводим цифру 8 - это модуль из репозитория "objects construktor"
Инсталируем этот модуль. Конфигурация выглядит следующим образом:

После создания модуля создаем категорию "Администрация пользователей" с
INPUT MODULE = users_admin
Категория как правило виртуального типа.



Теперь при клике на категорию вы получите в правой части экрана администрацию пользователей.

Теперь немного наведем красоты в  модуле:
a) Идем в /wbg/modules/input/users_admin/ открываем файл users_admin.php
там
$my_list->insert_cell("user_login","user_login", null, "");
$my_list->insert_cell("user_name","user_name", null, "");
заменяем на
$my_list->insert_cell("user_login","Логин пользователя", null, "width=50%");
$my_list->insert_cell("user_name","Имя пользователя", null, "width=50%");

Если у нас будет одна база пользователей и одна категория для их администрации то удаляем
$textlist->add_on_save("category_id",$_CFG['current_category']['id']);
и меняем
$my_list->sql_where = $SQL_string ? $SQL_string : "category_id = ".$_CFG['current_category']['id'];
на
$my_list->sql_where = $SQL_string ? $SQL_string : "";
чтобы убрать привязку к категории

б) файл _template.php - тоже переименовываем названия типа user_password в пароль


Если мы хотим хранить пароли в закрытом виде (скажем MD5) то делаем следующие операции:

файл : users_admin.php
Перед $textlist->save_data($ERROR);
добавляем :
if ($_POST['user_password']) {
    $_POST['user_password'] = md5("любойнаборсимволов".$_POST['user_password']);
} else {
    unset($_POST['user_password']); // нужно чтобы не перезаписать пароль пустотой.
}
любойнаборсимволов - нужно затем чтобы подстраховаться от перебора паролей. а то любят пользователи qwerty и 12345
Учтите что в модуле который потом будет искать пользователя в базе это нужно будет учесть.
Далее в файле _template.php в самом начале ставим строку
$this->content['user_password'] = '';
чтобы поле с паролем было всегда пустым а не выводило md5 пароля из базы.

На этом с пользователями закончили. Переходим к внешней части.
Первым делом инсталируем Standalone модуль под номером 9 (authorization)
При инсталяции указываем таблицу откуда будем брать пользователей и поля для логина и пароля в этой таблице.

Далнейшие действия зависят от того по какому принципу будет определяться те разделы которые закрыты для просмотра.
Простейший вариат - делаем отдельный OUTPUT шаблон, называем его скажем "template_for_locked_categories"
и как самую первую строку ставим <?php WBG::module("authorization")?>
Теперь любая категория которой вы присвоите данный шаблон будет закрыта для публичного просмотра.

Теперь нужно определить как пользователь будет вводить свой логин и пароль.
Опять таки простейший вариант - для этого делается отдельная страница где скажем посередине будет форма.
Делаем категорию в структуре сайта (например "авторизация")
Делаем output шаблон (например login_template) куда вставляем модуль <?php WBG::module("authorization", null, "form")?>
Открываем файл /wbg/modules/output/authorization.php
и в $_CFG['url_to_go_on_access_denied'] вписываем урл на который будет перекидываться пользователь если он попытается перейти на закрытый раздел. (Это урл нашей категории "авторизация"). Можно использовать конструкцию типа
$_CFG['url_to_go_on_access_denied'] = WBG::crosslink(3);
$_CFG['url_to_go_after_success_login'] - адрес куда будет переведен пользователь после авторизации.

Другие варианты постараюсь описать позже. Хотя модуль authorization состоит всего из пары десятков строк - разобраться в нем должно быть элементарно


После удачной авторизации все данные пользователя будут лежать в $web->current_user

Для logouta нужто чтобы ползователь передал ?logout






Пользователь

Пароль

Поиск по сайту



Ссылка продана за пачку денег
бесплатная CMS