> WWW hints - примеры программирования > элементы бизнес-логики web-сайта
Модуль авторизации

Введение

       Если вы решили на своем сайте предоставить пользователям доступ к некоторым его закрытым для общего доступа разделам, или вам необходимо персонифицировать какую-то информацию, например загружаемые материалы, добавляемые новости, то вам необходим модуль авторизации. Задача данного модуля заключается в регистрации пользователей на сайте, определении имени пользователя зашедшего на сайт и аутентификации пользователя на каждой странице.

      Идея данного модуля заключается в выделении пользователю некоего маркера доступа (атворизации) после ввода имени и правильного пароля. После успешной авторизации, для того, чтобы выяснить что за пользователь зашел на страницу, на ней производится аутентификация пользователя (на основе выданного маркера), после чего логика сайта позволяет определить всю необходимую информацию о пользователе: уровни доступа, активность и другую дополнительную информацию. Маркер доступа содержит в себе захешированную комбинацию имени и пароля пользователя и хранится в течение времени сеанса на рабочей станции пользователя в форме cookie. Модуль авторизации выявляет некриптостойкие пароли и оповещает об этом пользователя. Информация о пользователях хранится в базе данных mySQL, открытым текстом пароли не хранятся, структура таблиц содержится в самом модуле авторизации.

Структура модуля и примеры использования
Ядро - модуль user.php
реализует класс SiteUser, позволяющий создавать/удалять и изменять информацию о пользователе, авторизовать и аутентифицировать пользователей сайта:
UserName - имя (логин) пользователя
UserEmail - электронный адрес пользователя, введенный при регистрации
UserStateId - статус пользователя: 0 - не зарегистрирован, 1 - активен, 2 - заблокирован
UserRoleId - роль пользователя: 0 - не определена, 1 - обычный, 2 - модератор, 3 - администратор
UserId - уникальный идентификатор пользователя
UserPassword - пароль пользователя
addUser(...) - регистрация нового пользователя на сайте, проверяет криптостойкость пароля и корректность введенного адреса электронной почты
authorize(...) - авторизует пользователя на сайте, выдает маркер в форме cookie, вызывает один раз при вводе пользователем своего логина и пароля
authenticate() - аутентифицирует пользователя на каждой странице сайта, вызывается каждый раз, когда нужно узнать информацию о текущем пользователе сайта, заполняет атрибуты объекта SiteUser, если пользователь успешно авторизовался на сайте
logoff() - удаляет маркер доступа из cookie на рабочей станции пользователя
getLastUserName() - возвращает имя пользователя, последний раз авторизовавшегося на сайте
getUserRoleName() - возвращает русскоязычное название роли, которой обладает пользователь
Delete() - удаляет пользователя из списка пользователей сайта
Modify() - Сохраняет новые атрибуты пользователя, включая пароль

      Ниже приведен пример использования модуля авторизации для определения возможности пользователя совершать операции, позволенные администраторам сайта:

# авторизация пользователя
if($name <> '' and $password <> '') 
{
	$user = new SiteUser;
	$state = $user->authorize($name, $password);

	if($state == USERSTATE_ACTIVE) {
		exit(header("Location: ".$page)); # пользователь не зарегистрирован или заблокирован
	}
}
...

# вспомогательные функции для контроля доступа в закрытые разделы сайта
#
function HasAdminAccess()
{
	$user = new SiteUser;
	
 	if(!$user->authenticate() or $user->UserRoleId != USERROLE_ADMIN) 
 	{
 		echo 'Доступ разрешен только для администратора сайта';
		return false;
 	}
	return true;
}
      Далее приведен список дополнительных модулей, обеспечивающих регистрацию пользователей и управление пользователями, основанными на использовании функций класса SiteUser:
common.php - общий модуль, содержащий параметры подключения к базе данных и некоторые вспомогательные функцииы
logon.php - интерфейсный модуль, содержащий окно ввода логина и пароля и форму регистрации новых пользователей
usermenu.php - интерфейсный модуль, отображающий ссылки доступные пользователям после авторизации на сайте
userlist.php - интерфейсный модуль, отображающий список всех пользователей сайта с возможностью модификации их статуса, роли и сменой пароля
      Данные модули являются лишь некоторым вариантом использования модуля авторизации и показывают как применять его основные возможности. В вашем собственном сайте они приобретут другой вид и возможно более расширенную функциональность.

Скачать модуль авторизации с примерами использования: authorization.zip

 Evgeny Savitsky © 2002-2004