Только учу ларавел, и в плане практики, начал работу над проектом с двумя категориями пользователей, то есть что-то типо админа и редактора. Очень полезный урок, понял принцип использования, спасибо, эти уроки по ларе прямо клад знаний!
а можно урок про то как работать с базой данных через паттерн репозиторий ? иииииииииии в прцессе работы с данными как использовать атрибут pivot для моделей и включить его в запросы по поиску в RestApi ?
Добрый день, подскажите, пожалуйста, почему вы написали User::where('id',2)->getModal(), а не просто get(), в чем отличие между ними? И еще вопрос про Gate::after, у Вас в видео сгенерировалось исключение 'Вам запрещено', каким образом выбирается какое исключение выдать пользователю?
get() возвращает коллекцию (или, если так проще, что-то вроде массива моделей), а getModel возвращает модель. Аналогично можно сделать User::find(2); или User::where('id', 2')->first(); Что касается Gate::after - в видео не создавалось исключение. Это просто мы не прошли проверку гейта, поэтому на экране выведено "Вам запрещено". Логика вывода сообщения "Вам запрещено" - это простая проверка в контроллере InnerController, обратите внимание на 29:47
@@megavad2507 Все зависит от того, каким образом вы вызываете гейт. Если вы это делаете через метод контроллера $this->authorize, тогда у вас будет AuthorizationException и 403 ошибка в случае, если гейт не будет пройден. Если вы это делаете через Gate::inspect или Gate::check, то вы сами определяете, что отдавать клиенту, в зависимости от того, что вернул метод Gate::inspect или Gate::check
Нет, так не получится. В middleware параметры передаются через двоеточие. В вашем случае middleware называется "can", а параметр "index-protected". Если мне память не изменяет, дальше через двоеточие можно указывать и больше параметров. Например так: middleware("name:param1:param2")
Все зависит от разработчика. Обычно я бы это реализовал так: я бы сделал одну таблицу для пользователей и несколько ролей, в зависимости от которой пользователь может получить доступ к тем или иным возможностям системы (личный кабинет/админка). В итоге auth один, а гейтов может быть тоже один - например любому аутентифицированному пользователю даем доступ в личный кабинет, а вот для входа в админку нужно проверить наличие права (задействовать gate). Но тем не менее, можно сделать и два auth, но это, на мой взгляд, не совсем удобный способ. На одном проекте у меня именно так и получилось, так как админку я ставил через craftable и этот пакет ставит свои таблицы для хранения пользователей. В итоге два отдельных механизма аутентификации - один для админки, один для личного кабинета. И при этом пользователи хранятся в разных таблицах.
@@alexandr-v Если мне память не изменяет, то по-умолчанию, в laravel происходит редирект на ту страницу, с которой был редирект на страницу auth. А при прямом заходе на auth, после успешного ввода логина/пароля редирект идет на страницу /home или на ту, которую вернет метод redirectTo, либо которая содержится в свойстве redirectTo контроллера, осуществляющего аутентификацию, как раз через этот метод или свойство можно определить логику того, куда происходит редирект (например в зависимости от роли пользователя)
@@lectoria Если не ошибаюсь, вернуть на страницу, с которой нас перебросило можно так: return redirect()->intented(); * Спасибо огромное за Ваш труд, очень познавательные детальные видео без воды
Автору респект - подписка и лайк. Пишу CRM, очень пригодилось.
Отличный материал, спасибо что делишься опытом!
Только учу ларавел, и в плане практики, начал работу над проектом с двумя категориями пользователей, то есть что-то типо админа и редактора. Очень полезный урок, понял принцип использования, спасибо, эти уроки по ларе прямо клад знаний!
Огромное спасибо за подробную и не менее полезную информацию!
Спасибо, очень позновательный и интересный урок!!!
Спасибо! Отличная подача материала!!! С Новым 2023 годом!!
Огромное вам спасибо!
Спасибо за топовый урок.
супер, спасибо
От души!👍
Very helpful, Thanks a lot!
👍👍👍
а можно урок про то как работать с базой данных через паттерн репозиторий ?
иииииииииии в прцессе работы с данными как использовать атрибут pivot для моделей и включить его в запросы по поиску в RestApi ?
Добрый день, подскажите, пожалуйста, почему вы написали User::where('id',2)->getModal(), а не просто get(), в чем отличие между ними? И еще вопрос про Gate::after, у Вас в видео сгенерировалось исключение 'Вам запрещено', каким образом выбирается какое исключение выдать пользователю?
get() возвращает коллекцию (или, если так проще, что-то вроде массива моделей), а getModel возвращает модель. Аналогично можно сделать User::find(2); или User::where('id', 2')->first();
Что касается Gate::after - в видео не создавалось исключение. Это просто мы не прошли проверку гейта, поэтому на экране выведено "Вам запрещено". Логика вывода сообщения "Вам запрещено" - это простая проверка в контроллере InnerController, обратите внимание на 29:47
@@lectoria То есть, если не срабатывает Gate::after(), то всегда выдается 403 ошибка?
@@megavad2507 Все зависит от того, каким образом вы вызываете гейт. Если вы это делаете через метод контроллера $this->authorize, тогда у вас будет AuthorizationException и 403 ошибка в случае, если гейт не будет пройден. Если вы это делаете через Gate::inspect или Gate::check, то вы сами определяете, что отдавать клиенту, в зависимости от того, что вернул метод Gate::inspect или Gate::check
Добрый день подскажите, возможно ли передавать значения напрямую в middleware ???
->middleware('can:index-protected',[ ВОТ СЮДА ]);
Нет, так не получится. В middleware параметры передаются через двоеточие. В вашем случае middleware называется "can", а параметр "index-protected". Если мне память не изменяет, дальше через двоеточие можно указывать и больше параметров. Например так: middleware("name:param1:param2")
А если в проекте будет, например, и личный кабинет и админка, то надо использовать два gate и два auth? Или одного auth хватит?
Все зависит от разработчика. Обычно я бы это реализовал так: я бы сделал одну таблицу для пользователей и несколько ролей, в зависимости от которой пользователь может получить доступ к тем или иным возможностям системы (личный кабинет/админка). В итоге auth один, а гейтов может быть тоже один - например любому аутентифицированному пользователю даем доступ в личный кабинет, а вот для входа в админку нужно проверить наличие права (задействовать gate).
Но тем не менее, можно сделать и два auth, но это, на мой взгляд, не совсем удобный способ. На одном проекте у меня именно так и получилось, так как админку я ставил через craftable и этот пакет ставит свои таблицы для хранения пользователей. В итоге два отдельных механизма аутентификации - один для админки, один для личного кабинета. И при этом пользователи хранятся в разных таблицах.
@@lectoria Первый способ интересный, а куда будет тогда редиректить auth?
@@alexandr-v Если мне память не изменяет, то по-умолчанию, в laravel происходит редирект на ту страницу, с которой был редирект на страницу auth. А при прямом заходе на auth, после успешного ввода логина/пароля редирект идет на страницу /home или на ту, которую вернет метод redirectTo, либо которая содержится в свойстве redirectTo контроллера, осуществляющего аутентификацию, как раз через этот метод или свойство можно определить логику того, куда происходит редирект (например в зависимости от роли пользователя)
@@lectoria Если не ошибаюсь, вернуть на страницу, с которой нас перебросило можно так:
return redirect()->intented();
* Спасибо огромное за Ваш труд, очень познавательные детальные видео без воды
В афтере можно проверять не забанен ли юзер например. Но это не лучшее решение в плане оптимизации, лучше сразу отсеять кучу проверок.