создание ролей пользователей на сайте 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 [роль]

Пример массива с правами пользователя и функцией записи:

Проверка прав пользователя и запись в сессию:

Сообщение системы комментирования :

Форма пока доступна только админу. скоро все заработает. надеюсь.

Источник

Управление привилегиями пользователя на основе ролей

Существуют различные подходы к управлению доступом к информации, каждый из них имеет свои плюсы и минусы. Например, использование битовой маски очень эффективно, но ограничено 32 или 64 уровнями (количеством бит в формате целого числа). А подход на основе списка доступа (ACL) позволяет назначать уровни доступа объектам, но с операциями могут возникнуть сложности.

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

База данных

Нужно 4 таблицы для хранения ролей и информации о разрешениях: таблица roles содержит ID и имя роли, таблица permissions хранит ID и описание разрешения, таблица role_perm содержит соответствие ролей и разрешений, а таблица user_role содержит соответсвие ролей и пользователей.

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

Вот запрос CREATE TABLE для создания структуры в базе данных:

Никаких изменений для таблицы users не требуется, так как информация о правах доступа хранится отдельно. В отличие от других систем RBAC, в нашем случае пользователь не имеет никакой роли по умолчанию. Он просто не получает никаких полномочий. В классе PrivilegedUser возможно сделать обнаружение пользователей без ролей и выдачу роли без полномочий в таком случае. Или также можно сделать запрос SQL для копирования ID пользователей и инициализации их нужной ролью по умолчанию.

Класс Role

Вот код класса, который содержится в файле Role.php :

Класс PrivilegedUser

С помощью нового класса, который дополняет существующий класс пользователя, можно использовать существующий код управления пользователями, дополняя его новыми методами для работы с привилегиями.

Код класса в файле PrivilegedUser.php :

Метод getByUsername() возвращает объект, заполненный информацией о соответствующем пользователе. Метод почти идентичен тому, что обычно используется в класса пользователей, но его нужно изменить, чтобы добавить объект для ролей.

Метод hasPrivilege() получает описание разрешения и возвращает результат проверки его наличия у текущего пользователя.

С помощью описанных двух классов проверка привилегий пользователя будет выполняться очень просто:

Организационные вопросы

Одним из преимуществ использования ООП для RBAC является возможность простого разделения логики и сервисных функций. Например, можно добавить следующие методы к классу Role для управления ролями (добавление, удаление, и так далее):

Также можно добавить подобные методы для класса PrivilegedUser :

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

Заключение

В данном уроке мы рассмотрели базу для системы управления доступом на основе использования ролей. Достаточно простой код позволяет построить гибкую масштабируемую систему разграничения прав пользователей. Однако должно внимание надо уделять управлению пользовательским полномочиями на этапе использования, иначе гибкость может привести к хаосу и неразберихе.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: phpmaster.com/role-based-access-control-in-php/
Перевел: Сергей Фастунов
Урок создан: 9 Мая 2012
Просмотров: 52506
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Источник

Права доступа пользователей при авторизации на PHP

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

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

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

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

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

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

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

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

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

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

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

idlogin (Логин)password (Соленый пароль)cookiestatus (Статус)
1user827ccb0eea8a706c4c34a16891f84e7bsdfLjgyl1
2admin01cfcd4f6b8770febfb40cb906715822sMtrnwpJ10

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

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

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

Админка

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

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

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

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

idлогинemailстатусудалитьзабанитьредактировать
1user0test0@mail.ruадминудалить
delete.php?user_id=1
забанить
ban.php?user_id=1
редактировать
edit.php?user_id=1
2user1test1@mail.ruмодераторудалить
delete.php?user_id=1
забанить
ban.php?user_id=1
редактировать
edit.php?user_id=1
3user2test2@mail.ruюзерудалить
delete.php?user_id=1
забанить
ban.php?user_id=1
редактировать
edit.php?user_id=1
4user3test3@mail.ruюзерудалить
delete.php?user_id=1
забанить
ban.php?user_id=1
редактировать
edit.php?user_id=1
5user4test4@mail.ruзабаненудалить
delete.php?user_id=1
разбанить
unban.php?user_id=1
редактировать
edit.php?user_id=1
6user5test5@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. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Вступление

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Представьте себе, что вы создали огромный сайт с большим количеством уроков, которые помогают пользователям совершенствовать свои навыки. Кроме обычных зарегистрировавшихся людей у вас есть ещё несколько видов пользователей: администраторы, авторы и так далее.

Проблема:

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

Решение:

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

Если вы посмотрите демо на сайте или скачаете исходный код, то на главной странице вы найдёте демонстрацию переключения между разными типами пользователей. Для того, чтобы переключиться между пользователями, просто нажимайте на ссылку с их инициалами. Если вы зайдёте в ‘Админку’, ссылка на которую находится вверху страницы, вы попадёте в центр управления пользователями, где сможете управлять самими пользователями, их ролями и привилегиями. Вы так же можете установить эту систему у себя на локальном компьютере, предварительно скачав демо файлы. ПРЕДУПРЕЖДЕНИЕ: если пользователю под номером 1 убрать привилегию ‘access admin’, то вам не удастся перейти в админку.

Эта система позволит вам создавать любые группы пользователей (гостей, премиум пользователей, администраторов и т.д.). Так же вы сможете указывать уникальные привилегии как для каждой из перечисленных групп так и для отдельно взятых пользователей. Давайте же начнём реализацию такой системы с создания базы данных MySQL.

Шаг 1: Создание базы данных

Наш ACL будет использовать 6 таблиц (включая таблицу самих пользователей). Так же, если вы решили поставить себе такую систему вам нужно создать базу данных. Мы создадим таблицы со следующими структурами:

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Код создания БД записан в файле install.sql. Так же там присутствует файл sampleData.sql, который добавляет 4 пользователя, несколько ролей и полномочий. Просто откройте эти файлы в своём любимом текстовом редакторе и скопируйте содержимое в панель SQL в phpMyAdmin.

Шаг 2: Доступ к базе

Нам необходимо создать файл, который будет подключать нас к БД. Создайте файл assets/php/database.php и добавьте в него следующий код (замените значения переменных на свои, если это необходимо):

На одной из первых строк мы вызываем session_start(); в принципе не будем использовать переменные сессии, но они нам понадобится как часть механизма работы переключения пользователей. Затем мы вызываем ob_start() чтобы создать буфер. Обычно PHP отсылает страницу браузеру сразу после того, как её сгенерирует. Использование ob_start(), не позволит отослать заголовки браузеру до тех пор, пока они не будут загружены полностью или до тех пор пока мы не вызовем ob_end_flush(). Благодаря буферизации страницы мы можем делать редирект из любой её части, а не только с самого верха. Дело в том, что если заголовки страницы отсылаются браузеру, в лучшем случае только JavaScript может помочь нам производить редирект. Даже самый начинающий хакер может отключить JavaScript и попасть туда, куда ему попадать нельзя. Так что лучше предохраняться не только в жизни, но и в создаваемых системах.

На строках 4-8 мы инициализируем наши переменные. $hasDB будет содержать true или false в зависимости от того, подключены мы к базе или нет. $server, $user, $pass и $db это, я надеюсь, всем известные переменные, которые используются для подключения к базе. На строке 9 мы соединяемся с сервером баз данных, а на строке 10 определяем было ли это подключение успешным. Если да, то выбираем нужную нам базу. Если нет выдаём сообщение об ошибке через функцию die().

Шаг 3: Создание класса ACL

Приготовьтесь к долгой и изнурительной работе, т.к. класс ACL является основой нашей системы. Вперёд.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Наша система ACL будет объектно-ориентирована, поэтому нам нужно создать файл, где будет располагаться наш класс. Мы начнём с объявления класса, переменных и конструктора. Поместим наш свежеиспечённый класс в папку /assets/php/class.acl.php:

Анализ

После того как класс создан, мы создали 3 переменные для хранения информации, которая будет использоваться для генерирования ACL.

Конструктор

__constructor() предназначен для того, чтобы инициализировать объект при создании экземпляра класса ACL. Он вызывается автоматически после вот этой записи: new ACL();. В качестве аргумента конструктор получает ID пользователя. Внутри конструктора мы делаем проверку на существование ID пользователя. Если ID не существует, то мы создадим ACL для текущего пользователя, который зашёл в систему, считав значение переменной сессии. Если мы передали ID, ACL будет создан для этого конкретного пользователя (может быть полезно для входа в панель администратора).

После того, как мы получили ID, вызываем getUserRoles() который сгенерирует массив всех ролей, которые прикреплены к этому пользователю и помещает его в переменную $userRoles. В конце конструктора мы вызываем buildACL() для того, чтобы сгенерировать ACL. Метод ACL() создан для того, чтобы вся система работала и на PHP4. Когда мы вызываем new ACL() в PHP5, PHP интерпретатор запускает __constructor(). Если вы запустите этот же скрипт на PHP4, интерпретатор запустит ACL(). В PHP4 имя конструктора совпадало с именем класса.

Каждый раз, когда мы будем создавать экземпляр класса ACL, передавая ID пользователя, экземпляр класса будет содержать все привилегии найденного пользователя.

Вспомогательные методы

Пришло время добавить некоторые вспомогательные методы в наш класс. Эти методы будут использоваться другими методами для выполнения специальных задач:

По функциональности эти методы очень схожи т.к. они извлекают данные из БД. Единственный аргумент это ID роли/пользователя для которого выполняется выборка. В функцию извлекающую роли может быть передано, как целое так и массив. Метод is_array(), помогает нам определить массив это или нет и в зависимости от этого работать дальше для извлечения привилегий для каждой роли. Если был передан массив, мы воспользуемся implode() для создания списка, разделённого запятыми. В любом случае, мы используем это значение в SQL. Затем мы создаём новый пустой массив $perms – для хранения извлечённых привилегий.

Внутри цикла while(), мы сначала генерируем переменную $pK, которую будем использовать как ключ массива. Поскольку мы будем проверять пользователя на наличие отдельной привилегии, важно чтобы название привилегии было приведено к соответствующему формату. Для этой цели мы используем метод strtolower(). Если ключ пустой, мы пропускаем следующую итерацию при помощи continue;. Далее смотрим на $row[‘value’] для того, чтобы установить boolean значение для привилегии. Значение ’1′ в таблице будет ассоциироваться с true (другими словами у пользователя есть привилегия). Это важно для безопасности. В противном случае выставляем привилегии значение false. В конце функции мы создаём массив с несколькими ключами, чтобы иметь возможность получить всю информацию о привилегиях. Этот массив прикреплён к новому ключу в массиве$perms, который мы создали ранее. Заметьте, что мы используем $pK для создания нового индекса. В конце мы возвращаем массив.

Вы можете заметить, что в возвращаемом массиве есть индекс названный ‘inherited’. Он имеет особое значение для нашего ACL. Если пользователь обладает привилегиями по причине наличия у него роли (к которой относятся данные привилегии), то значение данной привилегии будет inherited. Если привилегия назначена пользователю отдельно, то значение будет другое.

В методе getAllPerms(), мы формируем список всех доступных для данного пользователя привилегий. В getAllRoles() мы так же можем указать в каком виде возвратить результат. Напишем ещё пару методов:

Шаг 4: Администрирование

Администраторская часть будет позволять управлять пользователями. Для этого нам нужно создать несколько интерфейсов: для вывода списка пользователей, редактирования, назначения ролей и привилегий.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Откройте /admin/users.php и добавьте следующий код:

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

Вставьте этот код в div с id ‘page’:

Всё очень просто. Мы формируем SQL запрос, и запускаем его в цикле. Для каждого пользователя мы генерируем ссылку для редактирования пользователя.

Редактирование отдельного пользователя

Вставьте этот блок кода сразу после того, что мы только что написали:

Для редактирования пользователя мы должны загрузить его ACL. Это позволит нам узнать какие роли и привилегии есть у данного пользователя. Мы создаём новый объект ACL, и передаём ему $userID который извлекается из GET. После этого мы формируем форму, состоящую из текстовых полей для редактирования логина, пароля и т.д. После мы выводим список ролей пользователя и ссылку для добавления новой роли. На строкак 10-16 загружаем все роли которые назначены данному пользователю, и выводим их на экран в цикле foreach(). Точно таким же образом мы выводим привилегии пользователя. Мы выводим только те роли и привилегии значения которых равно true для данного пользователя.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Присвоение ролей

Форма добавления роли пользователю будет такова:

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Добавьте этот код сразу после предыдущего блока:

В первую очередь нам необходимо создать форму и таблицу. Таблица будет состоять из 3х колонок: одна для ролей, вторая для checkbox который говорит, что данная роль уже присвоена, третья колонка для checkbox, который говорит, что роль не присвоена. После создания нового объекта ACL, мы загружаем массив со всеми ролями при помощи метода getAllRoles(). Это позволит нам вывести все строки (как назначенные, так и не назначенные).

Внутри цикла foreach() мы делаем следующее: мы выводим на экран label с названием роли. Затем мы выводим radio кнопку. Значение атрибутов name и id каждой кнопки radio будет уникальной и записанной в формате “role_[roleID]” (пример: role_0012). На строках 13 и 16 определяется какие radio кнопки должны быть нажаты. Первая будет нажата, если пользователь является обладателем данной роли, вторая если нет. Затем мы завершаем строку таблицы и переходим к следующей.

После всего этого мы добавляем некоторые скрытые (hidden) элементы. Они будут сообщать нам какую операцию проводить. Так же эти данные будут содержать ID пользователя, чтобы знать для кого сохранить изменения. Затем мы добавляем кнопку submit и кнопку cancel (отмены).

Назначение привилегий

Назначение привилегий очень схоже с назначением роли, за исключение нескольких моментов. Добавьте следующий код:

Мы начнём с добавления таблицы, только теперь у неё будет 2 колонки. Затем мы создадим объект ACL, вытащим массив привилегий (для этого пользователя ) и массив всех привилегий. В цикле foreach() в строке мы пишем название привилегии. Затем мы создаём элемент select. У него будет 3 опции: Allow, Deny и Inherit. Мы считываем значение $rPerms[$v[‘Key’]][‘value’] для того, чтобы знать какую из этих 3х опций выбрать по умолчанию. Если привилегия имеет значение inherited, то выберется опция Inherited.

После завершения элемента select и таблицы, мы как и в прошлом примере добавляем кнопки.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Сохранение данных

Добавьте этот код в /admin/users.php перед тегом doc type:

В первую очередь, данный код проверяет существование $_POST[‘action’]. Значение этой переменной хранится в одном из скрытых полей 2х форм, которые мы только что создали.

Работа происходит следующим образом:

В случае с привилегиями происходит то же самое. Только ищется другой префикс и работа производится с другой таблицей. После того, как все операции закончены, мы используем header(«location:…») для того, чтобы сделать redirect на страницу, на которой находились до того благодаря сформированной ссылке $redir.

Шаг 5: Редактирование Ролей

Теперь после того, как мы закончили формы для редактирования пользователей нам необходимо сделать то же самое и для ролей. Тут будет полегче. Нам необходимо реализовать: просмотр списка ролей и редактирование роли. Создайте файл /admin/roles.php со следующим содержанием:

Список ролей

И снова мы начнём с создания ACL объекта. Поведение страницы по умолчанию это вывод доступных ролей. Так что вставьте это код вместо :

Сначала проверим пуста ли строка запроса. Затем создадим массив ролей $roles при помощи getAllRoles(). На каждой итерации цикла foreach(), создадим ссылку, которая будет вести на страницу редактирования каждой отдельной роли. Если ролей нет, мы выводим соответствующее сообщение. В конце вставим кнопку, которая даст нам возможность вставить новую роль.

Редактирование роли

Добавьте этот код в /admin/roles.php прямо под предыдущим блоком:

Проверяя строку запроса мы ищем переменную roleID. Если она присутствует, то мы отображаем форму редактирования роли, если нет, то форму добавления новой роли. Внутри формы нам необходимо отобразить называние роли и таблицу её привилегий. Таблица содержит колонку для имени привилегии и значений, allow, deny, ignore. Дальше пройдёмся по массиву привилегий ($myACL->getAllPerms(‘full’))

Если всё произошло успешно, после редактирования роли у нас должно отобразиться примерно следующее:

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Сохранение данных

Вставьте этот код в /admin/roles.php перед тегом doc type:

Проверяем массив $_POST, ищем $_POST[‘action’]. Если нам необходимо сохранить новую роль, то:

Если мы нажали на кнопку Delele, то просто удалим роль из таблицы. Затем мы удалим все значения связанные с данной ролью из таблиц user_roles и role_perms для актуализации данных. Затем делаем redirect на страницу со списком ролей.

Шаг 6: Управление привилегиями

Управление привилегиями практически совпадает с управлением ролями. Нам необходимо реализовать: вывод списка всех возможных привилегий, и их редактирование. Добавьте следующий файл и код /admin/perms.php:

Список привилегий

Вставьте этот код вместо :

Используем getAllPerms() для получения массива привилегий. Впоследствии пройдёмся по нему, чтобы отобразить список. Каждая итерация внутри цикла foreach() выводит ссылку, которая используется для переноса на страницу редактирования привилегии. Если привилегий вообще нет, выводим соответствующее сообщение. Далее выводим кнопку добавления новой привилегии. Вот результат:

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Редактирование привилегии

Для того, чтобы редактировать или добавить новую привилегию, вставьте этот код после предыдущего блока:

Как и в выводе формы для ролей, мы проверяем наличие ID привилегии в строке запроса и в зависимости от этого выводим отображение добавления или редактирования записи. Мы открывает тег формы и добавляем 2 текстовых поля: одно для наименования привилегии, другое для ключа привилегии. Ключ мы используем для скрипта. Имя ключа должно быть таким же как имя самой привилегии только без пробелов, специальных знаков и написано прописными символами. Если мы редактируем запись, то в эти текстовые поля вставляем соответствующие значения.

В конце формы мы добавляем скрытые поля и кнопку submit. Затем создаём форму удаления и кнопку отмены.

Сохранение данных

Чтобы сохранить изменения касающиеся привилегий необходимо в файле /admin/perms.php перед тегом doc type вставить этот код.

Во-первых определяем какое действие нам необходимо обработать. Если мы сохраняем привилегию, то используем запрос replace into. Данный запрос обновит или вставит новую запись. Если мы получили переменную от формы удаления, вызываем запрос удаления записи. В любом случае мы делаем редирект на страницу perms.php.

Шаг 7: Меню админки

Теперь нам надо забацать небольшое меню состоящие из 3х ссылок. Для этого используем следующий код:

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Вот мы и создали 3 ссылки для управления тремя различными аспектами нашего ACL.

Шаг 8: Внедрение ACL на Ваш сайт

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Внедрить систему ACL на ваш сайт очень просто. Каждая страница на которой мы хотим использовать ACL должна иметь доступ к БД и инклудить сам ACL класс. После этого вам необходимо создать новый объект класса ACL.

В качестве примера, допустим у вас есть привилегия с ключом ‘access_admin’ и мы хотим использовать её в качестве пропуска в админ панель. Этот скрипт нужно вставлять в самом верху страницы, на которой будет происходить проверка.

А напоследок я скажу

ACL это прекрасный инструмент, который может помочь вам расширить возможности вашего сайта. Следуя этим шагам, вы можете создать безопасную гибкую систему, которая демонстрирует все основные принципы распределения ролей. Если у вас на сайте ещё нет подобной системы, то можете смело внедрять её. Спасибо за внимание.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.net.tutsplus.com/tutorials/php/a-better-login-system/
Перевел: Станислав Протасевич
Урок создан: 12 Февраля 2011
Просмотров: 99069
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

создание ролей пользователей на сайте php. Смотреть фото создание ролей пользователей на сайте php. Смотреть картинку создание ролей пользователей на сайте php. Картинка про создание ролей пользователей на сайте php. Фото создание ролей пользователей на сайте php

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *