Справка
Данные
Распределение объектов по таблицам
Основным объектом данных в системе является элемент таблицы. Для каждой таблицы определяется индивидуальный набор колонок - это поля объекта, набор его данных.
Рассмотрим пример простого интернет-магазина
Для него нам потребуется создать таблицы “Товары” и “Заказы”.
Поля таблицы “Товары”: название, артикул, цена, остаток, фотография.
Поля таблицы “Заказы”: товар, количество, цена на момент оформления и т.д.
Экземплярность таблиц
Объекты располагаются в экземпляре таблицы. Для одной таблицы может существовать несколько наборов объектов.
Допустим у клиента был один интернет магазин, затем было решено подключить к системе ещё один домен и на нём также открыть интернет магазин, который идентичен первому по логике работы, но отличается по содержащимся в нём товарам. В этом случае можно создать новый экземпляр таблицы “Товары”, наполнив его совершенно другим ассортиментом.
Другой пример: мы хотим разместить на одном сайте два блога или две ленты статей/новостей. Просто создаём новый экземпляр таблицы “Статьи” и привязываем его к нужному разделу сайта.
Объекты могут легко мигрировать из раздела в раздел, а также находиться в нескольких разделах одновременно.
Иерархия объектов
В рамках экземпляра таблицы объекты могут располагаться линейно или иерархически.
Иерархическая структура подойдёт объектам, которые предполагается вкладывать друг в друга. Например - “Страницы сайта” или “Категории товаров”
Экземплярность объектов / Множественность расположений
Объект может иметь набор расположений. Таким образом он может находиться сразу в нескольких экземплярах таблицы. Если расположение в таблице иерархично, объект может быть подчинён нескольким родителям.
Подчинение таблиц
Иерархия объектов возможна не только в рамках одной таблицы. Подчинение таблиц позволяет для каждого объекта главной таблицы создавать массив дочерних объектов из подчинённых таблицы. Таким образом осуществляется разнотиповая иерархия. В этом случае каждый объект главной таблицы является экземпляром подчинённой таблицы.
Продолжаем пример с интернет магазином
Кроме имеющихся таблиц “Товары” и “Заказы” добавляем новую таблицу “Категории товаров”, которой подчиняем таблицу “Товары”.
После этого мы можем добавлять к “Категории товаров” подобъекты типа “Товары”.
Далее мы можем загрузить модуль “Комментарии” и подчинить таблице “Товары” таблицу “Комментарии”. После этого можно добавлять массив подобъектов “Комментарии” к “Товару”.
Модульность / Экземпляры модулей
Группы таблиц объединены в модули, а их экземпляры распределены по экземплярам модуля. При этом в разных экземплярах модуля может быть использован один и тот же экземпляр таблицы.
У всех представленных выше таблиц магазина установим правило “уникальная”.
При создании нового экземпляра модуля “Магазин” мы получим новые списки товаров и заказов.
Теперь попробуем добавить таблицу, которая будет общая для всех имеющихся экземпляров магазина - “Шаблоны товара”, содержащую набор шаблонов для preview товара.
Создадим два экземпляра магазина А и Б.
Вот как будет выглядеть распределение экземпляров таблиц по экземплярам модуля:
Магазин А: Товары 1, Категория товара 1, Заказы 1, Шаблоны товара 1
Магазин Б: Товары 2, Категория товара 2, Заказы 2, Шаблоны товара 1
Переменные модуля
Модуль, также как и таблица, имеет набор полей. Значения полей определяются для объектов модуля, которыми являются его экземпляры.
Какие переменные можно дать магазину?
Давайте зададим следующие переменные для магазина:
- валюта по умолчанию
- способы доставки
- способы оплаты
Теперь мы можем задать значения для этих переменных отдельно для каждого экземпляра модуля.
Магазин А: валюта = руб; способы доставки = DHL, FeedEX; способы оплаты: Kiwi
Магазин Б: валюта = USD; способы доставки = ЖелДорЭкспедиция; способы оплаты: безнал
Типы полей
- Значение: Логическое / Число / Текст / URL / BLOB
-
Ссылки
- на объект / на массив объектов
- на файл / на папку с файлами
- на экземпляр модуля
- на пользователя системы
Физическое представление данных в таблицах MySQL
Доступ к данным
Виды доступов:
- не определено / определять вышестоящим правилом
- разрешить
- разрешить только для владельцев/авторов объекта
- разрешить для владельцев/авторов и их подчинённых
- запретить
Объекты, на которые накладываются доступы:
- Сайт: все / указанный
- Модуль: все / указанный
- Экземпляр модуля: все / указанный
- Таблица: все / все указанного модуля / указанная
- Подтаблица
- Тип поля объекта
- Группы пользователей: все / указанная
- Пользователи: все / указанные
- Папки с файлами: все / указанные
Действия, на которые накладываются доступы: обзор, добавление, изменение, удаление.
Специфические действия: управление, приглашение пользователя в группу / изгнание, регистрация пользователя, управление правами, вход на сайт.
Доступ к объектам системы определяется путём сложения доступов к элементам расположения объекта: экземпляр, модуль и таблица. В рамках каждого расположения происходит сложение доступов от общих к индивидуальным: все таблицы, все таблицы текущего модуля, текущая таблица. Более точная настройка всегда перекрывает общую.
Итоговый доступ для пользователя складывается из настроек всех групп, в которые он вступил, а также из доступов по умолчанию и индивидуальных настроек самого пользователя. Порядок сложения таков: права по умолчанию, права всех групп пользователя, индивидуальные права пользователя. При сложении одноранговые доступы складываются в более выгодную пользователю сторону, например в “разрешить”.
По умолчанию все доступы имеют значение “не определено”, которое трактуется как “разрешить”. Суперпользователь имеет эксклюзивные разрешительные права на любое действие.
В процессе настройки одним пользователем прав другого пользователя (или группы) невозможно указать доступы выше тех, которыми владеет текущий пользователь, за исключением тех, которые уже были определены ранее.
Доступ к конкретному объекту определяется через владельцев объекта.
Если пользователь, обладая ограниченными правами, создаёт некоторую сущность, он автоматически становится её автором, получая весь необходимый доступ (если таковой разрешён настройками безопасности).
Части системы могут запускаться с правами супер-пользователя или же с правами определённой группы пользователей. В этом случае происходит полное замещение (не комбинирование) прав, на права определённой группы, до конца исполнения части.
Примеры доступов
Сайт издательства
Исходные данные: Лента статей, группы пользователей: Авторы, Редакторы
Обе группы пользователей получают доступ на вход в административный кабинет.
Группа Авторы получает доступ на создание новых материалов в ленте статей, а также возможность редактировать статьи, находящиеся под их авторством.
Группа Редакторы получает доступ на редактирование любых статей.
Если на сайте статьи делятся по категориям (т.е. существует таблица “Категории” которой подчинена таблица “Статьи”), то можно разным пользователям группы “Авторы” назначать свои разделы для добавления в них статей.
Для этого Авторам даётся доступ на редактирование категорий, находящихся под их авторством. У каждой категории (как и у любого другого объекта) может быть несколько авторов. При этом, если ограничить отображение статей внутри категорий доступом “только для авторов”, то они даже не будут знать, что кто-то ещё кроме них занимается наполнением этой категории.
Если к статьям разрешено добавлять Комментарии, то желательно добавить ещё одну группу пользователей - Модераторы, у которых будет доступ на редактирование и удаление любых комментариев в системе.
Сервер веб-студии для SaaS решений
Задача: Размещать на одном сервере множество сайтов и предоставлять к ним многоуровневый доступ для Разработчиков, Верстальщиков, Секретарей и Контент-менеджеров
Разработчики имеют доступ на вход в административный кабинет, доступ на создание модулей и доступ на редактирования созданных ими модулей.
Верстальщики имеют доступ на редактирование и добавление в таблице “Шаблоны дизайна”.
Секретари имеют доступ к статистике посещений и доступ на добавление в таблицу “Новости”.
Контент-менеджеры имеют доступ на добавление и редактирование страниц сайтов.
Такие доступы установлены для групп, но при этом всем установлен запрет на чтение экземпляров модулей и сайтов. Это означает, что пользователь группы может видеть страницы сайта в принципе, но будет ли он видеть страницы конкретного сайта - вопрос его персональной детальной настройки.
Далее, каждому отдельному пользователю выставляется разрешающий доступ на нужный сайт, имеющий отношение к компании, в которой работает этот пользователь. Например, менеджерам из компании А выдаются доступы для сайта компании А. А менеджерам из компании Б выдаются доступы для сайта компании Б и т.д.
Если необходимо дать доступы для большого числа контент-менеджеров и секретарей компании А, то можно создать группу “Сотрудники компании А” с выставленными разрешающими правами для сайта А.
Таким образом, сотрудник компании А может быть участником двух групп - “Контент-менеджеры” и “Сотрудники компании А” (он может быть ещё и секретарём, если это необходимо).
В результате мы получим полностью готовое SaaS решение для веб-студии. Клиенты веб-студии будут видеть и управлять только своим сайтом. А разработчики и верстальщики не будут иметь доступа к информации клиентов, но будут иметь возможность наращивать функционал их сайтов и добавлять новые шаблоны дизайнов.
Читать далее про "Обработчики"