Настройки безопасности продолжение

В прошлых записях я уже писал о неоднозначных ситуациях с правами доступа к разным элементам системы. Поскольку система Е5 это ещё и фреймворк, приходится предусматривать самые разнообразные настройки прав.

Например, для того, чтобы добраться к нужной новости, нужно вначале убедиться, что есть доступ к модулю "Новости", затем, что есть доступ к таблице "Список новостей". При этом, пользователь должен иметь права на просмотр текущего экземпляра новостей (например "Главные новости сайта"). При этом пользователь может иметь доступ на просмотр вообще всех строк, во всех модулях, таблицах и экземплярах.

Спорных ситуаций возникает тысячи. Например, что делать если пользователь состоит в двух группах - в одной из них ему разрешено редактировать эти новости, а в другой запрещено? В таком случае доступ складывается в пользу разрешить. А что если, в одной группе пользователю разрешено редактировать вообще все строки, а в другой группе запрещено редактировать "Главные новости сайта"? Тогда редактирование будет запрещено. Т.к. более тонкая настройка доступа перекрывает глобальные настройки.

Итак, кто кого перекрывает и как?
Попробую расписать всё по порядку.

1. Смотрим глобальные настройки доступа к строкам ("все строки"), вначале проверяем значения "по умолчанию", затем перебираем все группы, в которых участвует пользователь и в конце концов добавляем личные настройки самого пользователя. Сложение идёт в пользу "Разрешить". А вот точный порядок сложения доступов: Не задан -> Запретить -> Разрешить только для элементов, созданных автором -> Разрешить.

2. Смотрим настройки для всех таблиц текущего модуля. Перебираем таким же образом, как и в предыдущем случае (настройки по умолчанию -> настройки для групп, в которых участвует пользователь -> частные настройки пользователя). Доступ также складывается в пользу "Разрешить".

Теперь складываем полученные доступы из 1ого и 2ого пунктов, но сложение идёт в пользу "Перекрыть". Т.е. настройки для таблиц модуля будут перекрывать настройки всех строк в том случае, если они заданы.

3. Смотрим настройки для конкретных таблиц модуля. Всё делаем по аналогии с пунктом 2. И также складываем эти настройки с получившимися из пунктов 1 и 2 способом "Перекрыть".

Таким образом, у нас будут преобладать точечные настройки. Однако возможны некоторые некорректные ситуации. Например, пользователь состоит в группе "Старшие модераторы" и "Модератор новостей". Старшим модератором разрешается редактировать строки всех таблиц модуля новости, а модератору новостей запрещается редактирование таблицы "Шаблоны". Тогда такому пользователю нужно будет в его личных настройках разрешать редактирование этой таблицы, иначе он (даже являясь старшим модератором) не сможет редактировать шаблоны.

Такая логика не прозрачна, по этому она была внедрина в систему буквально сегодня (через 6 месяцев после запуска системы доступов). Старая система доступов к строке выглядела иначе. Она обрабатывалась для каждой группы отдельно способом "Перекрыть", а затем складывалась в пользу "Разрешить". Т.е. обрабатывались сразу все уровни доступов. Теперь же я решил сделать отдельную обработку для каждого уровня доступов (все строки -> строки модуля -> строки таблицы). Вначале выбирается уровень, а затем начинают перебираться все группы и складываться разрешения в пользу "Разрешить", но при сложении с следующим (более тонко-настроенным) уровнем, доступы складываются в пользу "Перекрыть".

4. Складываем получившиеся доступы с доступом к текущему экземпляру. Сложение идёт в пользу "Перекрыть", т.к. указание экземпляра является самой тонкой настройкой.

Зачем так усложнять?

Система изначально позиционируется как мультидоменная. Более того, была задумка предоставлят систему веб-студиям, чтобы они могли на одном сервере (в одной папке и с одной базой данных) размещать большое количество клиентов таким образом, чтобы клиенты работали с системой индивидуально (не догадываясь о наличии в системе других сайтов, пользователей и т.д). Для этого был реализован доступ по экземплярам.

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

На некоторых сайтах объём модерируемой информации настолько велик, что необходимо отдельно заводить группу пользователей, которые смогут редактировать только комментарии к новостям. А для специалистов веб-студий, обслуживающих сразу несколько сайтов системы, необходимо давать отдельный доступ на редактирование таблицы "Шаблоны новостей". Таким образом был реализован доступ по таблицам.

Автор: E5 Developer

Дата: 09 мая 2012



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

Имя

E-mail

Комментарий

Контрольный вопрос:
Сколько будет: 17+13-9


 
Наши работы
Массажные кровати LongLife

Благотворительная организация Преображение

Автомобили из Кореи СК-МОТОРС

Мобильные бани МОБИБА

Европейские ограждения Евростандарт

Портал недвижимости Аренда 911

Сеть саун Кантри

Строительная компания Сибирский Стиль

Автомобили из Кореи СК-МОТОРС

Арбитражный суд НСО

Сервис-кухня Ланч

Ремонт и обслуживание компьютеров ПК-Сервис

Интернет-каталог велосипедов и детской мебели Дами

 

Главная О студии Расценки Портфолио Статьи Контакты