Laravel 5 Авторизуйте пользователя, чтобы увидеть определенные кнопки

Я только начал изучать Laravel 5 и столкнулся с проблемой, которую не мог решить:
Как сказать, что определенный пользователь может видеть только определенные вещи.

Например, если я просматриваю профиль, который мне не принадлежит, кнопка «Редактировать профиль» не должна быть видна. Но если я посмотрю на свой профиль, эта кнопка должна быть видна.

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

public function updateProfile(Profile $profile, UpdateProfile $request){
//update the given profile
}

Таким образом, UpdateProfile здесь представляет собой класс запросов, который имеет метод authorize () и rule (), а в методе authorize () я проверяю, обновляет ли зарегистрированный пользователь свой собственный профиль.

Поэтому я подумал, что, может быть, я смогу использовать метод authorize () сам по себе, но я не совсем уверен, как.

Теперь, конечно, я всегда могу проверить что-то вроде:

if($user -> userID == Auth::user() -> userID)

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

Поэтому мой вопрос будет таким: где бы я мог проверить что-то подобное в laravel 5?

1

Решение

Вы могли бы написать userCanEdit метод на вашем Post учебный класс. Что-то вроде этого:

function userCanEdit(User $user)
{
return $user->isAdmin() || $this->user_id == $user->id;
}

А потом просто назовите это на ваш взгляд:

@if ($post->userCanEdit(Auth::user()))
<a href="{{ url("edit/{$post->getId()}") }}">Edit</a>
@endif

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

1

Другие решения

Поэтому мой вопрос будет таким: где бы я мог проверить что-то подобное в laravel 5?

По твоему мнению. Например, предположим, что вы загружаете содержимое блога следующим образом:

// controller

public function showPost(Post $post){
return view('views.post', ['post' => $post]);
}

По нашему мнению, мы хотим, чтобы только автор вносил в него изменения.

// post view

<h2>{{ $post->getTitle() }}</h2>

@if ($post->getAuthor()->getId() === Auth::user()->getId())
<a href="{{ url("edit/{$post->getId()}") }}">Edit</a>
@endif

Как вы можете видеть выше, если автор является тем же пользователем, что и аутентифицированный, то он / она может видеть ссылку для редактирования этого поста.

0

По вопросам рекламы [email protected]