laravel, как добавить условия в функцию __construct () - PullRequest
0 голосов
/ 27 января 2020

Как я могу добавить некоторые условия для функции __construct (), например, если middleware is admin или текущий идентификатор пользователя равен этому посту user_id, у меня есть сообщения, созданные пользователями, поэтому редактировать могут только те, кто создал этот пост или администратор Я попробовал код ниже, поэтому role_id = 4 означает, что это администратор,

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

public function __construct($post_number)
{
   $posts=Post::where('post_number',$post_number)->first();
  where(Auth::User()->id==$posts->user_id)OR (Auth::User()->role_id==4);
}

Ответы [ 3 ]

0 голосов
/ 27 января 2020

Вы можете создать свое промежуточное программное обеспечение, а затем просто добавить его в конструктор вашего контроллера.

public function __construct()
{
      $this->middleware('your_custom_middleware');
}

Также, таким образом, вы можете добавить кроме метода.

для получения дополнительной информации нажмите здесь

0 голосов
/ 27 января 2020

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

, поэтому сначала запустите php artisan make:policy PostPolicy. Затем откройте свой класс Policy и обновите его следующим образом:

namespace App\Policies;

use App\User;
use App\Post;

class PostPolicy
{

    /**
     * Determine if the given post can be updated by the user.
     *
     * @param  \App\User  $user
     * @param  \App\Post  $post
     * @return bool
     */
    public function update(User $user, Post $post)
    {
        // May be define isAdmin() on user class ??
        return $user->role_id==4 || $user->id === $post->user_id;
    }
}

после создания политики, затем вы можете зарегистрировать его в своем AuthService provider как

protected $policies = [
        Post::class => PostPolicy::class,
    ];

Кстати, также дать краткое прочтение Политика автоматического обнаружения

Как только это будет сделано, это то, что вы можете сделать,

public function __construct($post_number)
{
   $posts=Post::where('post_number',$post_number)->first();

   $this->authorize('update', PostPolicy::class);
}
0 голосов
/ 27 января 2020

Вы можете использовать laravel при методе. Теперь ваш код должен выглядеть следующим образом.

public function __construct($post_number)
{
   $posts=Post::where('post_number',$post_number)->first();

   if($posts->user_id == auth()->user()->id || auth()->user()->role_id == 4) {
       //cann edit the post
   } else {
        //cannot edit the post
        return false;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...