Replies: 3 comments 2 replies
-
Возвращать муншайн пользователя из $user = request()->user();
if ($user && !$user instanceof MoonshineUser) {
$builder->whereBelongsTo($user);
} Но, как было сказано в тг, это очень плохая идея, когда основное приложение знает об админке. |
Beta Was this translation helpful? Give feedback.
-
Смотрите в данном примере вы допускаете архитектурную ошибку завязывая глобальный скоуп на реквест и желание использовать его везде! Если мы переопределим муншайн и сделаем дефолтный guard moonshine то ваш скоуп также не будет работать так как вернет объект с moonshine юзером Если вы хотите чтобы мы совсем перестали использовать guard Laravel то здесь я комментарировать не буду Но в итоге ваш глобальный скоуп также вызовет конфликт при использовании в консоли а у нас экспорт возможен на очередях, вызовет вашу модель и будет обращаться к реквесту и здесь я также не хочу комментировать Решение вашего подхода с глобальным скоупом в муншайн решается через метод query в ресурсе, вы можете его отключить Может я конечно не прав но результат дискуссии это плохой скоуп, модель которая берет еще и ответственность с реквестом и возможно определенный контекст даст право на существование, но это больше напоминает пример их туториала и не более того Ну и в целом я не особо понял цель дискуссии, переопределять гуард во всех реквестах в муншайн, ну тут опять ваш скоуп вызовет конфликт, избавляться от ларавел системы аутентификации с возможностью переключения между guard тоже решение которое не найдет реализации и не имеет смысла, поэтому как бы странная тема поднята, но очень интересная) |
Beta Was this translation helpful? Give feedback.
-
@lee-to Итак, имеем пользователя, у которого есть аккаунт на основном сайте и в админке. По записи в таблицах users и moonshine_users. Причем в админке пользователь имеет следующие данные:
а в таблице users такие данные:
Пользователь совершает вход на основной сайт и в админку (с двух разных табов браузера) и в админке заходит в свой профайл: Согласен, можно придраться к тому, как реализован телескоп. Но вот как объяснить вот это: Зачем при загрузке профайла админа муншайн делает бессмысленный запрос в таблицу Нашел также побочный эффект, скорее всего завязанный на этот же баг. Если разлогиниться на основном сайте, то муншайн также выкинет админа, т.е. произойдет разлогирование и в муншайн. |
Beta Was this translation helpful? Give feedback.
-
Из беседы в тг (пример с глобальным скоупом лишь для подсвечивания проблемы):
Есть модель
Subscriber
, каждый авторизованный пользователь может видеть только своих подписчиков (связь subsribers.user_id на users.id). Неавторизованному пользователю ресурс недоступен.Для соблюдения этого требования реализован глобальный скоуп:
Пользователь авторизуется одновременно на основном сайте (user_id=11) и в админке. При запросе ресурса SubscriberResource, админ с якобы полным доступом, увидит результат следующего запроса:
and `subscribers`.`user_id` in (11)
- сработал global scope.Конечно, есть решения. Например, переопределить query в ресурсах:
Но об этом надо помнить при создании новых тегов, которые определяют свои билдеры. Нужно следить, чтобы они использовали билдер ресурса, а не билдер модели. А если теги реализует другой программист или теги пишутся через полгода после создания ресурса? Появляется косвенная несогласованность между тегами ресурса и билдером ресурса.
Но опять же, данный пример лишь лакмусовая бумажка, чтобы подсветить проблему: муншайну доступен авторизованный пользователь основного приложения. Зачем? Админка должна работать только с авторизированным админом. Если, например, установить муншайн на другой домен, этой проблемы не будет:
request()->user()
всегда будет возвращатьnull
.Beta Was this translation helpful? Give feedback.
All reactions