Я только начал изучать 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?
Вы могли бы написать 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
Преимущество этого состоит в том, что вы сохраняете свое представление в чистоте и централизуете бизнес-логику с помощью одного, многократно используемого метода. Если определения для пользователя, который может редактировать сообщение, когда-либо изменятся, это единственное место, о котором вам придется беспокоиться.
Поэтому мой вопрос будет таким: где бы я мог проверить что-то подобное в 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
Как вы можете видеть выше, если автор является тем же пользователем, что и аутентифицированный, то он / она может видеть ссылку для редактирования этого поста.