Создание ролей пользователей на сайте php
Создание ролей пользователей на сайте
Привет друзья. Хочу поговорить с вами о методе разграничения прав пользователей на сайте, а точнее о ролях пользователей.
Роль пользователя это совокупность прав и разрешений выданные той или иной роли описанной в информационной системе.
Так вот, на любом форуме вы встречали администраторов, модераторов, гостей и т.д. Все это и есть роли. Каждая из ролей отвечает своим задачам и имеет свои привилегии. В Web приложениях роли создаются программистом, он сам создает роли и описывает их права.
Самые распространённые роли это:
И так друзья, что мы сможем делать с помощью ролей на нашем сайте? А все что угодно. Например вы можете показывать какую-то часть контента не зарегистрированному пользователю. Если пользователь прошёл регистрацию и авторизовался в системе, то его привилегии увеличиваются в плане доступа к контенту и он уже может просматривать более подробный контент вашего ресурса (например фотогалерею, оставлять комментарии и т.д). Все зависит от вашей фантазии и того что хотите показать пользователю или на оборот спрятать от него.
И так, создадим таблицы в нашей базе данных. У меня это таблицы:
В таблице bez_reg в конце добавляем поле role, где собственно и будет привязка пользователя к роли.
Далее создаем таблицу bez_role, где напишим названия наших ролей:
Данный трех ролей нам будет достаточно, чтобы система ролей работала. Создаем третью таблицу bez_contnet, здесь будет храниться контент и роли пользователей которым можно просматривать данный контент.
С таблицами разобрались, теперь нужно нам сделать себя администраторами т.к. по идее при импорте базы данных у вас должна быть учетная запись по умолчанию с ролью администратор, но так как мы делаем все сами, то нам не лень залезть в базу и сделать себя админом )).
Регистрируемся через форму регистрации, активируем свой аккаунт изменив поле status = 1 и делаем себя администратором установив в поле role = 1.
Далее заполняете таблицу bez_contnet, произвольным текстом, при этом в поле role через запятую указываете те роли которым разрешен доступ на просмотр данного контента. У меня администратор может просматривать все статьи, модератор только первую статью, пользователь только вторую статью.
С созданием нужных таблиц разобрались, теперь нужно немного поправить скрипт авторизации. Для это переходим в папку ./scripts/auth/auth.php ищим запрос к базе данных
Заменяем на новый запрос к базе данных
Далее добавляем нужные сессионые переменные для работы с авторизированным пользователем.
Распределение ролей на сайте с примерами
Как вы наверное уже догадались, у пользователя может быть несколько ролей на сайте! В зависимости от того, как написан код!
О ролях пользователя на сайте
Что такое роль пользователя на сайте
Роль пользователя на сайте определяется создателем сайта(программистом, движком) прописанными ранее в коде.
В зависимости от этой роли, к которой принадлежит пользователь ему доступны соответствующие возможности!
Какие роли пользователей бывают на сайте!?
Я бы принимал для сайта. классический список ролей для пользователя:
Как присваивать права пользователя!?
1). Как реализовать права пользователя самым простым способом!?
Для каждого типа пользователя нужно выделить отдельную сессию:
2). Как присваивать входящему в систему ту роль, которая ему принадлежит!?
Следующий вопрос, который должен возникнуть у вас :
Каким образом скрипт будет определять, что это заходит Администратор или Модератор и.т.д!?
Когда один из пользователей системы будет авторизовываться, то система должна извлечь роль, из того носителя, где эта роль для него прописана! Носитель, может быть базой данных, либо файлом.
3). Как прописать возможности для каждой роли на сайте в php
Далее нам нужно создать условие/условия для каждой роли на сайте:
При выполнении этого условия, должен располагаться, код, контент доступный только «Администратору»
При выполнении этого условия, должен располагаться, код, контент доступный только «Модератору»
При выполнении этого условия, должен располагаться, код, контент доступный только «Пользователь»
И все что осталось. это роль «Гостя»
Как присваивать права пользователя из базы данных!?
Реализовать можно по разному, но алгоритм он будет и в «Африке» алгоритм!
У вас, как у администратора сайта должен быть способ занесения в базу данных пользователей метки роли для пользователя!
И каждому пользователю, которому требуются добавить или изменить роль добавляем, ну например численное значение:
При авторизации запуск роли пользователя
Когда пользователь регистрируется, проверяем не только пароль с логином, но и поле роль, в котором была установлена роль пользователя.
Создаем условие, если роль равна одному из приведенных чисел, по этому условию запускаем сессию:
Не обязательно распределять роли таким образом.
Как присваивать права пользователя из файла!?
Присваивание ролей можно реализовать и с помощью файла.
Т.е. алгоритм будет аналогичный, что выше описанным способом, только данные по пользователям и ролям будут занесены в отдельный файл!
О файле с ролями пользователя
И да. в одном файле могу храниться данные, самое малое. лично проверял 500 000 строк. без проблем..(см. по размеру. 500 000 вышло примерно 10мб)
Если предполагается пользователей больше чем 500 000 распределите по первой букве и 10 цифрам это будет (28 + 10)* 500 000 = 19 000 000
Т.е. пользователи, емайл которого начинается с буквы «a» будет находится в файле «a.dat»и т.д.
Если этого будет недостаточно, то распределяйте по первым двум знакам:
((28 + 10)*(28 + 10))* 500 000 = 722 000 000 [роль]
Пример массива с правами пользователя и функцией записи:
Проверка прав пользователя и запись в сессию:
Сообщение системы комментирования :
Форма пока доступна только админу. скоро все заработает. надеюсь.
Права доступа пользователей при авторизации на PHP
Учебник PHP
Практика
Важное
Регулярки
Работа с htaccess
Файлы, папки
Сессии и куки
Работа с БД
Практика по работе с БД в PHP
Перед чтением см. новые уроки раздела «Важное», которые появились выше.
Практика
Движок PHP
Продвинутые БД
Аутентификация
Практика
ООП и MVC
Абстрактные классы и интерфейсы
Трейты
ООП Магия
Практика
Практика: классы как набор методов
Очень часто на сайтах делают различные типы пользователей.
Каждый тип обладает разными привилегиями.
Более сложные варианты: юзер, редактор, публикатор, модератор, дизайнер, администратор.
Конечно, количество типов пользователей зависит конкретно от вашего сайта.
Устанавливаем права доступа
Ну, а теперь приступим к реализации.
Обычно права доступа хранят в базе данных в специальном поле.
Давайте назовем его status.
Сделаем сайт, на котором только два типа пользователей: юзер и администратор.
Статусы 2-9 мы резервируем за вероятными появлениями на нашем сайте других типов пользователей.
id | login (Логин) | password (Соленый пароль) | cookie | status (Статус) |
---|---|---|---|---|
1 | user | 827ccb0eea8a706c4c34a16891f84e7b | sdfLjgyl | 1 |
2 | admin | 01cfcd4f6b8770febfb40cb906715822 | sMtrnwpJ | 10 |
Теперь при авторизации мы должны добавить значение поля status в переменную сессии $_SESSION[‘status’]:
Теперь, если какое-то действие требует определенного приоритета, мы можем проверить его так:
При регистрации нового пользователя мы должны жестко задать его статус (скорее всего это будет 1) при сохранении в базу данных (чтобы хакер не смог зарегистрироваться как админ!).
Админка
Админкой называется зона сайта, куда имеет доступ только администратор сайта (иногда некоторые другие типы пользователей могут иметь ограниченный доступ).
В админке обычно реализуется добавление и редактирование текстов статей, управление пользователями (удаление, бан, изменение статуса) и многое другое.
Список пользователей
Пример страницы админки:
id | логин | статус | удалить | забанить | редактировать | |
---|---|---|---|---|---|---|
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 |
Обратите внимание на забаненного пользователя с у него вместо ссылки ‘Забанить’ стоит ссылка ‘Разбанить’.
Бан пользователей
Администратор должен иметь возможность забанить какая-либо пользователя.
Аккаунт забаненного пользователя не удаляется, но пользователь не сможет больше зайти на сайт (совсем или какое-то время).
Для этого в таблице users следует ввести дополнительное поле banned.
Теперь следует немного изменить скрипт авторизации так, чтобы забаненный пользователь не смог зайти на сайт. Изменение нужно сделать только в одном месте:
В админке бан осуществляется так: администратор переходит по ссылке типа: ban.php?user_id=1 и выполняется SQL запрос на UPDATE строки с пользователем:
Удаление пользователей
Удаление выполняется аналогично бану, только в этом случае аккаунт удаляется совсем из базы данных.
Администратор переходит по ссылке типа delete.php?user_id=1 и выполняется SQL запрос на DELETE строки с пользователем:
Аналогично решаются все другие задачи админки, например, изменение статуса.
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.
PHP авторизация на сайте — чтобы пользователи не мерзли у входа
Дата публикации: 2016-10-12
Стандартная авторизация
Авторизация на сайте является необходимой функцией. С ее помощью владелец ресурса может попасть в административную панель и скорректировать работу систему, а контентщик – опубликовать новый материал.
Кроме этого на многих сайтах пользователям предоставляют доступ к дополнительному функционалу, которым не могут воспользоваться обычные посетители (комментирование, размещение фотографий, специализированные инструменты). Для авторизации человек должен быть зарегистрирован в системе ресурса.
В современном интернете стандартной считается модуль авторизации на сайте, построенный на PHP и MySQL. Вся информация о пользователе, полученная во время регистрации, записывается в специальную таблицу БД MySQL. Набор сохраняемых значений на каждом сайте может варьироваться, но обязательными являются логин и пароль пользователя.
Человеку, зашедшему на любимый ресурс, нужно сообщить его системе о том, что он является зарегистрированным (постоянным) пользователем ресурса. Для этого в специальную форму посетитель вводит свой логин и пароль. Затем их значение с помощью скрипта авторизации на PHP и MySQL сравнивается с данными, сохраненными в СУБД. Если они совпадают, то пользователь получает доступ к расширенному функционалу ресурса.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Здесь еще можно упомянуть о системе ролей, реализованных во многих популярных движках. В них каждой учетной записи предоставляется доступ к определенному набору инструментов. Более подробно этот процесс описан в материалах, посвященных CMS.
Мы это проходили
Да, этот процесс мы уже рассматривали в предыдущих материалах. Но мы ни разу не упоминали о такой важной составляющей, как сессии. С их помощью пользователь может после авторизации посещать все разделы ресурса, и не проходить данную процедуру на каждой странице. Рассмотрение темы о том, как сделать авторизацию на сайте PHP, было бы не полным без изучения возможностей сессий.
Начнем, как всегда, с формы. Вот ее разметка:
Как с помощью PHP и MySQL создать систему регистрации и авторизации пользователей
Хотя в Интернете есть много пособий на эту тему, большинство из них предназначено для продвинутых пользователей.
Эта статья расскажет о том, как создать простую версию системы авторизации и регистрации пользователей с использованием PHP и MySQL для начинающих. Давайте начнем!
Ресурсы, необходимые для работы с этим руководством:
Что мы создаем
Настройка сервера
Вы можете использовать любой хостинг с поддержкой PHP и MySQL ( только убедитесь, что он поддерживает PHP версии 5.3 или более поздней и MySQL версии 4.1.3 или более поздней ).
Шаг 1 – MySQL
Взгляните на приведенный ниже код SQL :
Кроме того, используйте auto_increment для автоматического назначения идентификаторов или номеров пользователям, которые будут регистрироваться в системе.
Шаг 2 — Разметка
С помощью этого кода вы получите результат, который показан на рисунке ниже:
С помощью этого кода вы получите следующий результат:
Этот код даст нам следующий результат:
Шаг 3 — CSS
К этому времени, вы уже должны получить тот же результат, что и на изображении, приведенном в начале статьи.
Шаг 4 — Многоразово используемые элементы
Затем снова удалите эту часть во всех трех файлах PHP и замените ее следующим кодом:
Шаг — 5 Подключение к базе данных
Теперь, когда вы включили файлы разделов заголовка и подвала, пора создать новый включаемый файл. Назовите его constants.php и скопируйте в него следующий код:
В приведенном выше коде, мы создали константы информации базы данных. Теперь мы можем легко изменять информацию всякий раз, когда это необходимо.
Шаг — 6 Конфигурация файла register.php
В приведенном выше коде, обратите внимание, что перед добавлением данных в базу производится их валидация. Переменная message используется для хранения сообщения об ошибках или об успешном выполнении действия.
Шаг — 7 Конфигурация файла login.php
Шаг — 8 Конфигурация файла intropage.php
Шаг — 9 Конфигурация файла logout.php
Скопируйте данный код в файл logout.php :
Заключение
Вы можете изменять приведенные в этой статье коды по своему усмотрению. Если у вас есть идеи по их улучшению, буду рад услышать об этом в комментариях.
Надеюсь, вам понравилась эта статья. Увидимся в следующий раз!
>
>
else <
$message = «That username already exists! Please try another one!»;
>
>
else <
$message = «All fields are required!»;
>
>
?>
md5 шифрование так и не нашел в коде 🙁
Объясните новичку, как работает система донатов на сайте, как её создать и подключить к базе данных, и как менять цену на игровую валюту, буду очень благодарен!
где есть подключение к бд или работа с бд надо добавить букву i
например
mysql_query устаревшая
новая mysqli_query
читаем тут https://www.php.net/manual/ru/
валидатор https://phpcodechecker.com
Объясните пожалуйста шаг 4. Зачем заменять на header.php? А в footer.php только копирайт.
пожауйста скиньте исходник. не могу разобраться с кодом!
И только после этого всё заработало, как автор писал в статье: