Разрабатывается большая информационная система, поддерживающая много сложных бизнес-процессов и правил.
Работают пользователи с разными ролями, для которых содержимое одной и той же страницы может кардинально отличаться.
Необходимо для каждой из ролей в зависимости от текущего состояния документа обеспечивать свой функционал и т.д.
Вопросы, связанные с SEO в данном проекте не имеют значения.
Использоваться будет Laravel + Vue.js
Вопрос заключается в выборе архитектуры приложения SPA / MPA.
В SPA в первую очередь беспокоит безопасность приложения. Необходимость делать дополнительные запросы для проверки доступа к документу, действиям, режимам просмотра и др.
С другой стороны, SPA в плане удобства для пользователя выглядит предпочтительнее.
Прошу дать совет в какую сторону идти и на что стоит особенно обратить внимание.
Это как с RISC архитектурой ...
Если вы можете разделить систему на частично независимые процессы - делайте MPA
Если сложность процессов достигает некого абстрактного потолка понимания - разбивайте, те MPA
SPA - это когда одни и те же данные вы хотите показать с разных сторон.
А как Вы можете прокомментировать вопрос безопасности?
Я вижу это так: в MPA - конкретный запрос, гарды и т.д. и передача выполнения контроллеру.
В случае SPA как это происходит? Неужели действительно нужно делать дополнительный запрос?
С точки зрения безопасности ...
Задача ограничить доступ - добавление, изменение, удаление... что там еще.
Далее больше относиться к не серверному рендерингу.
Vue.js исполняемый на клиенте - это красивый фантик в который завернули ваши данные. Зачем тогда на Vue.js передавать данные которые он не должен видеть. Если вы на клиента передали данные они скомпрометированы.
Пусть Laravel занимается безопасностью отдаваемых данных и там проверяйте роли.
НО вы получите страшную нагрузку на Laravel (по сравнению с Vue). Vue будет только вырисовывать кнопочки, окошки, галочки на клиенте под данные.
С серверным Vue рендерингом .
Там сложнее и проще. Вопрос в вашей паранойи. Передать часть системы безопасности на фронт (Vue) который будет проверять разрешения на запрос данных. Пример. нажали на кнопку - сразу появилась надпись: "Запрос запрещен", те данные даже не запросились.
С точки зрения безопасности ... без разницы SPA или MPA. IMHO. В MPA мне кажется проще ошибки отлавливать.
Александр, Каким наиболее оптимальным способом использовать vue компоненты внутри blade?
Есть идея передавать во vue компонент template с помощью слота. То есть для каждого
компонента будет создаваться blade шаблон и vue компонент (т.е. в компоненте
не будет html секции).
На сервере будут проверяться условия доступа к компоненту, и далее @include нужного шаблона. Это должно обезопасить от скомпрометированных данных.
Что думаете по этому поводу?
...
Оптимально - не понятно ))). У вас слабый сервер или мало места или канал узкий.
На сервере будут проверяться условия доступа к компоненту, и далее @include нужного шаблона.
Зачем? Разделение на Шаблон, Стиль и Скрипт - это нормально. Я бы из компонента страницы вызывал дочерний компонент. Динамическая загрузка компонентов. Например. Страница и Компонент - Персоны. Есть кнопка Адрес. Она показывается или не показывается в зависимости от роли. НО Эта кнопка запускает дочерний компонент Адрес и сточки зрения безопасности (паранойи) в компоненте Адрес я бы тоже перепроверил роль пользователя.
Отдельно грузить только шаблоны ... а смысл? Данные уже на страницы в переменных JS, а шаблон их красиво размещает.
SPA приложение делаете отдельно. И оно с Laravel или Lumen будет обмениваться через api. Весь контроль доступа будет проверяться на стороне бэкэнда. Middleware же не зря придумали. Да можно разграничивать доступы на уровне токенов..
Вот вы запарили писать про мидлвари. Кроме роутов есть еще части вьюх и логика где мидлвари никак не помогут. Для авторизации в ЛАравел есть ОТДЕЛЬНЫЙ функционал.
jazzus, да какие вьюхи? он же про spa приложение пишет. Не надо тупить - про авторизацию и так все знают. не зря же я про токены написал Laravel Sanctum решает эту проблему..
MVP_Master, чем отличается авторизация от аутентификации? тем что авторизации НАСРАТЬ на токены и Laravel Sanctum. Человек справшивает про разный фронт для разных ролей вьюхи там или нет. И мидлвари с токенами здесь вообще никак не помогут.
jazzus, нашел к чему придраться. как раз мидлваре отсеивать данные, которые не полагаются человеку получать на фронт так же как и ролевые токены. Вам просто делать нечего вот вы и шляетесь по чужим комментариям и оставляете там высеры думая что вы такой умный но даже не удосуживаетесь вникать в то что имел ввиду человек. Паразитируете одним словом как незванный гость. Вам заняться нечем больше? нет чтоб с женщиной провести время... Или книгу почитать умную. Так вы прожигаете свое время и чужое.
MVP_Master, мидлваря отсеит запрос целиком
и многие мвп мастера и начитанные герои любовники там пишут если не админ return false
что не решает проблему когда тебе не нужно отсеивать зпапрос, а разным ролям по одному запросу отдать разное содержимое на фронте и разную логику на бэке
что соответствует вопросу автора
пользователи с разными ролями, для которых содержимое одной и той же страницы может кардинально отличаться
соответсвенно и на бэке разная логика (разные ресурсы, набор данных и тд) тк нельзя на фронт отдавать то к чему нет доступа даже если ты не показываешь это
и мидлвари здесь не работают
тк они созданы для фильтрации реквеста
а для авторизации в Ларавел есть отдельный инструмент и это не Sanctum с токенами, а политики авторизации, рекомендую ознакомиться.
Делал приложение на Vue SPA (портал с играми, анкетами и т.д.), возникла проблема в следующем:
если на странице присутствуют динамические скрипты, то для их подгрузки на SPA надо строить большой велосипед - подгружать их во фрейм, где к ним теряется доступ Vue. Особенно, если эти скрипты подгружают ещё какие-то скрипты
в то время, как при стандартной перезагрузке MPA они просто вставляются в html