#php #laravel
#php #laravel
Вопрос:
Я новичок в Laravel, я создаю мини-блог с пользователями и публикациями, каждый может видеть сообщения, и каждый пользователь может удалять и обновлять свой собственный пост, поэтому я использую политики для авторизации.
При создании моих политик я понял, что код для обоих (удаление / обновление) одинаков
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post)
{
return $user->id === $post->user_id;
}
Должен ли я оставить это таким образом или я должен создать только один метод, потому что он избыточен?
Я имею в виду, что если я использую только один метод, я могу применить его из конструктора моего PostController в одной строке ко всем методам контроллера, которые я хочу
$this->middleware('can:policyMethodName, post')->except('show', 'index', 'create');
Какая наилучшая практика для применения политик в Laravel?
Ответ №1:
Это общий вопрос для программирования, а не конкретный вопрос для Laravel.
С точки зрения функциональности вам придется спросить себя, что имеет больше смысла. Если вы ожидаете, что этот блог всегда позволит пользователю обновлять / удалять свои собственные записи, тогда, возможно, имеет смысл использовать один метод canEditOrDelete
. Однако в будущем, если вы считаете, что есть вероятность, что вы захотите ограничить редактирование сообщений пользователями, например, на n минут, тогда вам нужно перепрограммировать свою логику. Надеюсь, это не имеет слишком большого значения, потому что вы ограничиваете количество обращений к этому методу.
Если вы хотите получить действительно фантазии, вы можете использовать разрешения на основе битов. К этому нужно немного привыкнуть, если вы раньше не использовали битовые операции, но это относительно простой способ и дает вам гораздо больше гибкости.
class Permissions {
const CAN_EDIT = 1;
const CAN_DELETE = 2;
const CAN_EDIT_OR_DELETE = CAN_EDIT | CAN_DELETE; // in base-10, this is "3"
}
permissions($user, $post) amp; Permissions.CAN_EDIT_OR_DELETE; // returns true if user can edit or delete post.