Laravel Gates. Реализация логики проверки прав.

แชร์
ฝัง
  • เผยแพร่เมื่อ 9 พ.ย. 2024

ความคิดเห็น • 25

  • @olegpupkin6892
    @olegpupkin6892 ปีที่แล้ว +1

    Автору респект - подписка и лайк. Пишу CRM, очень пригодилось.

  • @poleznoedelo
    @poleznoedelo 2 ปีที่แล้ว +5

    Отличный материал, спасибо что делишься опытом!

  • @danceban9166
    @danceban9166 3 ปีที่แล้ว +2

    Только учу ларавел, и в плане практики, начал работу над проектом с двумя категориями пользователей, то есть что-то типо админа и редактора. Очень полезный урок, понял принцип использования, спасибо, эти уроки по ларе прямо клад знаний!

  • @hopexstudio6388
    @hopexstudio6388 ปีที่แล้ว

    Огромное спасибо за подробную и не менее полезную информацию!

  • @ДанилоКоверсун
    @ДанилоКоверсун 3 ปีที่แล้ว +4

    Спасибо, очень позновательный и интересный урок!!!

  • @andrei_olekh
    @andrei_olekh ปีที่แล้ว

    Спасибо! Отличная подача материала!!! С Новым 2023 годом!!

  • @lebedzecom
    @lebedzecom 3 ปีที่แล้ว +3

    Огромное вам спасибо!

  • @mexvision-3556
    @mexvision-3556 3 ปีที่แล้ว

    Спасибо за топовый урок.

  • @mirakmalsultanov3398
    @mirakmalsultanov3398 2 ปีที่แล้ว

    супер, спасибо

  • @welldone8294
    @welldone8294 2 ปีที่แล้ว

    От души!👍

  • @dasdasdasdass
    @dasdasdasdass 3 ปีที่แล้ว +1

    Very helpful, Thanks a lot!

  • @levdau
    @levdau 3 ปีที่แล้ว +1

    👍👍👍

  • @codeurient
    @codeurient 2 ปีที่แล้ว

    а можно урок про то как работать с базой данных через паттерн репозиторий ?
    иииииииииии в прцессе работы с данными как использовать атрибут pivot для моделей и включить его в запросы по поиску в RestApi ?

  • @megavad2507
    @megavad2507 3 ปีที่แล้ว

    Добрый день, подскажите, пожалуйста, почему вы написали User::where('id',2)->getModal(), а не просто get(), в чем отличие между ними? И еще вопрос про Gate::after, у Вас в видео сгенерировалось исключение 'Вам запрещено', каким образом выбирается какое исключение выдать пользователю?

    • @lectoria
      @lectoria  3 ปีที่แล้ว +2

      get() возвращает коллекцию (или, если так проще, что-то вроде массива моделей), а getModel возвращает модель. Аналогично можно сделать User::find(2); или User::where('id', 2')->first();
      Что касается Gate::after - в видео не создавалось исключение. Это просто мы не прошли проверку гейта, поэтому на экране выведено "Вам запрещено". Логика вывода сообщения "Вам запрещено" - это простая проверка в контроллере InnerController, обратите внимание на 29:47

    • @megavad2507
      @megavad2507 3 ปีที่แล้ว

      @@lectoria То есть, если не срабатывает Gate::after(), то всегда выдается 403 ошибка?

    • @lectoria
      @lectoria  3 ปีที่แล้ว

      @@megavad2507 Все зависит от того, каким образом вы вызываете гейт. Если вы это делаете через метод контроллера $this->authorize, тогда у вас будет AuthorizationException и 403 ошибка в случае, если гейт не будет пройден. Если вы это делаете через Gate::inspect или Gate::check, то вы сами определяете, что отдавать клиенту, в зависимости от того, что вернул метод Gate::inspect или Gate::check

  • @palach_666
    @palach_666 3 ปีที่แล้ว

    Добрый день подскажите, возможно ли передавать значения напрямую в middleware ???
    ->middleware('can:index-protected',[ ВОТ СЮДА ]);

    • @lectoria
      @lectoria  3 ปีที่แล้ว

      Нет, так не получится. В middleware параметры передаются через двоеточие. В вашем случае middleware называется "can", а параметр "index-protected". Если мне память не изменяет, дальше через двоеточие можно указывать и больше параметров. Например так: middleware("name:param1:param2")

  • @alexandr-v
    @alexandr-v 3 ปีที่แล้ว

    А если в проекте будет, например, и личный кабинет и админка, то надо использовать два gate и два auth? Или одного auth хватит?

    • @lectoria
      @lectoria  3 ปีที่แล้ว

      Все зависит от разработчика. Обычно я бы это реализовал так: я бы сделал одну таблицу для пользователей и несколько ролей, в зависимости от которой пользователь может получить доступ к тем или иным возможностям системы (личный кабинет/админка). В итоге auth один, а гейтов может быть тоже один - например любому аутентифицированному пользователю даем доступ в личный кабинет, а вот для входа в админку нужно проверить наличие права (задействовать gate).
      Но тем не менее, можно сделать и два auth, но это, на мой взгляд, не совсем удобный способ. На одном проекте у меня именно так и получилось, так как админку я ставил через craftable и этот пакет ставит свои таблицы для хранения пользователей. В итоге два отдельных механизма аутентификации - один для админки, один для личного кабинета. И при этом пользователи хранятся в разных таблицах.

    • @alexandr-v
      @alexandr-v 3 ปีที่แล้ว

      ​@@lectoria Первый способ интересный, а куда будет тогда редиректить auth?

    • @lectoria
      @lectoria  3 ปีที่แล้ว

      @@alexandr-v Если мне память не изменяет, то по-умолчанию, в laravel происходит редирект на ту страницу, с которой был редирект на страницу auth. А при прямом заходе на auth, после успешного ввода логина/пароля редирект идет на страницу /home или на ту, которую вернет метод redirectTo, либо которая содержится в свойстве redirectTo контроллера, осуществляющего аутентификацию, как раз через этот метод или свойство можно определить логику того, куда происходит редирект (например в зависимости от роли пользователя)

    • @Isiah-Thomas
      @Isiah-Thomas 3 ปีที่แล้ว +2

      @@lectoria Если не ошибаюсь, вернуть на страницу, с которой нас перебросило можно так:
      return redirect()->intented();
      * Спасибо огромное за Ваш труд, очень познавательные детальные видео без воды

  • @mexvision-3556
    @mexvision-3556 3 ปีที่แล้ว

    В афтере можно проверять не забанен ли юзер например. Но это не лучшее решение в плане оптимизации, лучше сразу отсеять кучу проверок.