Всем привет! Начал проектировать сложный проект. Прошу помощи совета, чтобы в будущем не пришлось все перестраивать и ломать.
Сначала начал думать как организовать несколько профилей:
1. Профиль танцора.
2. Профиль тренера танцоров.
3. Профиль администратора студии.
4. Профиль руководителя студии.
5. Профиль судьи.
6. Профиль организатора мероприятий.
Разработка будет на Yii используя модульную структуру.
Первое, что в голову пришло - это повесить все на две Таблицы user и profile, так как различие между профилями будет не большое. В 1-4 поля. Далее сценариями Yii и Моделями Форм осуществлять работу с этими таблицами. Все это будет объединено в одном модуле user. Разделение профилей осуществляется по полю role.
Второе, что пришло в голову это использовать под каждый профиль отдельную таблицу dancer, judge, admin... Но использовать одну таблицу user где будет хранится информация с логинами и паролями. Здесь можно попробовать вынести отдельные модули на танцора, судью, админа... Однако при этом будет слабая связь с модулем user.
Третье - это полностью самодостаточные модули со своими данными авторизации.
Мне кажется, что удобнее проектировать все в одном модуле, как описано в первом случае. Однако, подумав ещё понял, что сам проект, скорее всего, будет разнесен на несколько приложений, что, скорее всего, будет иметь разные базы данных:
1. Студия танцев (функционал по работе со студией, в основном с сайтом, рейтингом. Учет будет в отдельной CRM системой)
2. Организация мероприятий (функционал по работе с мероприятиями: назначения судей, регистрация участников как из студии так и других, управление регистрацией...)
3. Приложение для работы на мероприятии (счетная)
Все данные профилей использоваться и пересекаться не только с модулями внутри приложения, но и между приложениями. Вижу в этом один способ — через api.
Но ещё хотелось бы данные авторизации: логин, пароль, токен хранить в одном месте...
Понимаю, проект сложный. Возможно придётся подключить других разработчиков Yii, но начинать буду один, возможно, после выхода Yii3. А сейчас важно заложить правильный путь и начать разрабатывать малоотвественные модули.
Если все пойдёт хорошо, то в системе будет от 100 000 человек. Но начнём с малого.
Так же планируется интеграция с действующей CRM системой имеющая уже 200 школ Россиии СНГ, которую использую сам. И одной из самых больших организаций в России. Сейчас уже есть действующая версия по работе с судьями России на базе этой организации реализованная мной.
Теперь самый непонятные для меня вопросы это: Как все связать? Как правильно выстроить? Как устраивать взаимосвязи между данными? Какую структуру использовать? В общем таких вопросом пока много.
Если не вдаваться в подробности, то структуру проекта вижу так:
1. Управление студией (админка, фронт)
- модуль пользователей
- подключаемый модуль рейтингов
- дополнительный модуль для своих нужд.
3. Счетная система (админка)
По модульности не думал, скорее всего просто будет принимать данные и считать. На первом этапе возможно будет интегрирована с действующей программой.
Админка и фронт будут внедряться в сам модуль:
Controllers
Backend
Frontend
....
Module.php
Возможно, что не сможете помочь из-за большого непонимания деталей, но буду рад абсолютно любому высказыванию, наставлениями и советам по теме))
P.S. Если вопрос требует других тегов тостера или вы считаете его не правильно написанном - прошу предлагать правки вопроса. Если я что-то не понятно описал, пожалуйста, задайте свои уточняющие вопросы в комментариях.
Берете за основу структуру приложения advanced, только вместо frontend, и backend, у вас будут свои приложения для нужд проекта. То-есть получается несколько фронтенд приложений, и одно бекенд приложение + база данных на всех. Что касается производительности и 100 000 аккаунтов, то тут вам в помощь шардинг, репликация и т.д.
Если логика разделения ролей сложная, то тут без RBAC никак, и стандартное решение Yii2 наверняка с ней справится.
Всё это делается одним приложением, чтобы потом не ломать голову себе и окружающим. Ну, понятно, что админка сама собой. Но, так как они пересекаются с фронтом, то общие модули в common'е. Тут главное - допилить имеющийся RBAC под свои нужды, и не забывать его где нужно использовать.
Имеет место быть. Но тогда пропадает ещё такая возможность, как использовать разные домены.... Чтобы воплотить common папку в моем случае можно эти разные приложения хранить в одном месте. Тогда можно обойтись без api. А почему стандартный RBAC не подойдёт?
По моему опыту стандартный RBAC хорош в простых случаях. Когда делается нечто навороченное, он уже перестаёт быть RBAC'ом в том понимании, что эта аббревиатура означает. Там уже, помимо ролей включаются какие-то "кабинеты", "должности", "обязанности", персонам с одной ролью можно смотреть или редактировать документы после редактирования другой персоной, и т.п. ерунда. Этим самым RBAC'ом можно упростить разброс кода.
А домены - это же буквы, не более. Имея $_SERVER, можно в соответствии с буквами направлять всё на соответствующие точки входа, и это не обязательно /web/index.php.
Максим Ворожцов, никуда возможность использования разных доменов не пропадает, как минимум можно задавать роуты с доменами, ну или динамически их вставлять. По поводу стандартных компонентов, они все подходят только для тривиальных задач, иногда приходиться или писать с нуля или допиливать напильником иначе упремся в какую-то мелочь.