Лучшие практики политик Laravel

#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.