Очень часто на сайтах делают различные типы пользователей.

Каждый тип обладает разными привилегиями.

Самой простой вариант, который можно реализовать - это два типа пользователей: обычный юзер и администратор.

Более сложные варианты: юзер, редактор, публикатор, модератор, дизайнер, администратор.

Конечно, количество типов пользователей зависит конкретно от вашего сайта.

Устанавливаем права доступа

Ну, а теперь приступим к реализации.

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

Давайте назовем его status.

Сделаем сайт, на котором только два типа пользователей: юзер и администратор.

Пусть юзеру соответствует статус '1' и самый низкий приоритет, а администратору - статус '10' и самый высокий приоритет.

Статусы 2-9 мы резервируем за вероятными появлениями на нашем сайте других типов пользователей.

У нас в таблице users не зря было два пользователя с характерными логинами user и admin - назначим им теперь соответствующие статусы:

id login (Логин) password (Соленый пароль) cookie status (Статус)
1 user 827ccb0eea8a706c4c34a16891f84e7b sdfLjgyl 1
2 admin 01cfcd4f6b8770febfb40cb906715822 sMtrnwpJ 10

Теперь при авторизации мы должны добавить значение поля status в переменную сессии $_SESSION['status']:

<?php
	...

	//Стартуем сессию:
	session_start(); 

	//Пишем в сессию информацию о том, что мы авторизовались:
	$_SESSION['auth'] = true; 

	/*
		Пишем в сессию логин и id пользователя
		(их мы берем из переменной $user!):
	*/
	$_SESSION['id'] = $user['id']; 
	$_SESSION['login'] = $user['login']; 

	//Пишем в сессию статус пользователя (приоритет):
	$_SESSION['staus'] = $user['staus']; 

	...
?>

Теперь, если какое-то действие требует определенного приоритета, мы можем проверить его так:

<?php
	//Если пользователь авторизован и администратор, то выполним какой-то код:
	if ( $_SESSION['auth'] == true and $_SESSION['staus'] == 10) {

	}
?>

При регистрации нового пользователя мы должны жестко задать его статус (скорее всего это будет 1) при сохранении в базу данных (чтобы хакер не смог зарегистрироваться как админ!).

<?php
	/*
		При регистрации устанавливаем статус в единицу:
	*/
	$query = 'INSERT INTO users SET login="'.$login.'", password="'.$saltedPassword.'", salt="'.$salt.'", status=1';
?>

Админка

Админкой называется зона сайта, куда имеет доступ только администратор сайта (иногда некоторые другие типы пользователей могут иметь ограниченный доступ).

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

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

Если оба условия выполняются - даем доступ в админку.

Иногда вход в админку защищают дополнительным логином-паролем. И это правильно - админка самая важная часть сайта с точки зрения хакера!

Список пользователей

Типичная задача админки - вывод списка пользователей с возможностью какие-либо действий над ними.

Пример страницы админки:

id логин email статус удалить забанить редактировать
1 user0 test0@mail.ru админ удалить
delete.php?user_id=1
забанить
ban.php?user_id=1
редактировать
edit.php?user_id=1
2 user1 test1@mail.ru модератор удалить
delete.php?user_id=1
забанить
ban.php?user_id=1
редактировать
edit.php?user_id=1
3 user2 test2@mail.ru юзер удалить
delete.php?user_id=1
забанить
ban.php?user_id=1
редактировать
edit.php?user_id=1
4 user3 test3@mail.ru юзер удалить
delete.php?user_id=1
забанить
ban.php?user_id=1
редактировать
edit.php?user_id=1
5 user4 test4@mail.ru забанен удалить
delete.php?user_id=1
разбанить
unban.php?user_id=1
редактировать
edit.php?user_id=1
6 user5 test5@mail.ru юзер удалить
delete.php?user_id=1
забанить
ban.php?user_id=1
редактировать
edit.php?user_id=1

Обратите внимание на забаненного пользователя с id = 5, у него вместо ссылки 'Забанить' стоит ссылка 'Разбанить'.

Бан пользователей

Администратор должен иметь возможность забанить какая-либо пользователя.

Аккаунт забаненного пользователя не удаляется, но пользователь не сможет больше зайти на сайт (совсем или какое-то время).

Для этого в таблице users следует ввести дополнительное поле banned.

Если значение этого поля '1' - значит пользователь забанен.

Теперь следует немного изменить скрипт авторизации так, чтобы забаненный пользователь не смог зайти на сайт. Изменение нужно сделать только в одном месте:

<?php
	$query = 'SELECT*FROM users WHERE login="'.$login.'" AND banned !=1';
?>

В админке бан осуществляется так: администратор переходит по ссылке типа: ban.php?user_id=1 и выполняется SQL запрос на UPDATE строки с пользователем:

<?php
	$query = 'UPDATE users SET banned=1 WHERE id="'.$_REQUEST['id'].'"';
?>

Удаление пользователей

Удаление выполняется аналогично бану, только в этом случае аккаунт удаляется совсем из базы данных.

Администратор переходит по ссылке типа delete.php?user_id=1 и выполняется SQL запрос на DELETE строки с пользователем:

<?php
	$query = 'DELETE FROM users WHERE id="'.$_REQUEST['id'].'"';
?>

Аналогично решаются все другие задачи админки, например, изменение статуса.