Разрешения в Laravel — ACL против промежуточного ПО

У меня возникли проблемы с пониманием того, когда нужно использовать ACL или промежуточное ПО в Laravel. Я понимаю примеры на их сайте и Laracasts, но это довольно простые примеры.

Это ни в коем случае не сложно, но я не видел примеров для них. Допустим, у меня есть два маршрута, которые позволяют пользователю создать задачу. Первый — это запрос GET для заполнения информации, а второй — POST для сохранения информации. Некоторым пользователям не разрешено создавать задачи в зависимости от их роли. В обоих случаях не существует конкретного объекта, который, насколько я понимаю, требует ACL. Буду ли я использовать промежуточное ПО для чего-то подобного? И когда объект существует, использовать для этого ACL?

Альтернативой, к которой я пытался приспособиться, является также использование запросов формы, но тогда мне пришлось бы создавать объект запроса формы для каждого маршрута (хотя лично я не возражаю).

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

Заранее спасибо.


person kenshin9    schedule 10.08.2016    source источник


Ответы (1)


Примечание. Я собирался опубликовать это как комментарий, но получилось слишком много. Не стесняйтесь ждать лучших ответов и, возможно, считайте это просто комментарием.

Я думаю, что вы упускаете весь смысл здесь. У вас может быть middleware для обращения к ACL, или вы можете использовать FormRequest для обращения к ACL или использовать каждый из них отдельно. Например, в методе authorize метода CreateTaskRequest вы можете проверить ACL, чтобы узнать, есть ли у пользователя подходящая роль для создания задачи.

Возможно, вы слишком увлеклись, когда Джефф пытается проверить, owns ли пользователь опубликовал сообщение. Этот тип ACL ориентирован на запись, но у вас может быть роль, которая просто принимает пользователя в качестве параметра (и никакой другой объект) и смотрит, имеет ли этот пользователь только определенную роль. Возвращая значение true, действие разрешается, в противном случае оно запрещается.

Промежуточное ПО больше связано с маршрутом, чем с запросом. У вас также может быть промежуточное ПО, которое получает аутентифицированного пользователя и проверяет, есть ли у него роль для создания задачи. Это разные способы достижения одной и той же цели (что является одним из преимуществ Laravel, имеющего множество способов достижения одной и той же цели).

Ваше конкретное действие, которое нужно выполнить, — это действие «Создать новую задачу». Кто вы хотите, чтобы иметь возможность сделать это? Пользователи, у которых есть роль менеджера? Пользователи с разрешением create-task?

В конце дня я бы рассмотрел следующее:

  • Есть много маршрутов, которые будут иметь одно и то же правило? Возможно, промежуточное программное обеспечение было бы хорошим выбором.
  • Существуют ли определенные правила для каждого вида операций? Может ли пользователь, который не создавал задачу, отредактировать ее? Запросы формы могут быть проще для достижения такой спецификации
  • Какая $this среда сделает мою жизнь проще? $this из Form Request или $this из промежуточного ПО?

Одна вещь, которую я усвоил на уроках Джеффа, это то, что он преподает слишком много классных вещей, и иногда я пропускаю один или два пункта. Попробуйте еще раз просмотреть основные шаги и, возможно, остановитесь, когда решите, что нашли что-то, что сработает. Затем реализуйте это и посмотрите, чем ваш случай отличается от его, и как, по вашему мнению, он напишет эту функцию.

person Marco Aurélio Deleu    schedule 11.08.2016