2016-07-04 5 views
1

Я новичок в Laravel (5,2), а после этого большой серии https://www.youtube.com/watch?v=Zxmf0n2sC1I&index=34&list=PLwAKR305CRO-Q90J---jXVzbOd4CDRbVxLaravel 5 Права доступа пользователей

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

например: вошедшего в систему пользователя «A» не разрешено редактировать сообщения от пользователя B.

Спасибо за помощь мне.

ответ

1

Если ваша таблица сообщений имеет номер user_id, вы можете проверить, совпадает ли этот пользователь с зарегистрированным пользователем. Например:

routes.php

Route:get('post/{id}/edit', [email protected]); 

PostsController.php

class PostsController extends Controller{ 
    public function edit($id){ 
     $post = Post::findOrFail($id); 
     if($post->user_id !== Auth::user()->id){ 
      abort(403); 
     } 
     return view('posts.edit', $post); 
    } 
} 

EDIT: Обновление включая индексный метод в соответствии с просьбой в комментариях.

routes.php

Route:get('posts', [email protected]); 
Route:get('post/{id}/edit', [email protected]); 

PostsController.php

class PostsController extends Controller{ 

    public function index(){ 
     $posts = Post::all(); 
     return view('posts.index', $posts); 
    }   

    public function edit($id){ 
     $post = Post::findOrFail($id); 
     if($post->user_id !== Auth::user()->id){ 
      abort(403); 
     } 
     return view('posts.edit', $post); 
    } 

} 
+0

Отлично. Это отлично работает для редактирования. Однако что-то не так с моим индексным представлением (где перечислены все сообщения). Мой код выглядит так: public function index ($ id) { // создайте var и сохраните все записи в блоге из DB $ posts = Post :: findOrFail ($ id); if ($ posts-> id! == Auth :: user() -> id) { abort (403, 'Zugriff verweigert'); } return view ('posts.index') -> withPosts ($ posts); } И сообщение об ошибке: «ОшибкаException в PostController.php line 23: Отсутствует аргумент 1 для приложения \ Http \ Controllers \ PostController :: index() " –

+1

По соглашению индексный метод ресурса используется для перечисления и не имеет каких-либо параметров URL-адреса, поэтому вы пытаетесь получите параметр '$ id', и Laravel говорит, что этот параметр отсутствует. Я буду обновлять ответ, включая метод индекса. –

0

Я ваш пост имеет user_id, то вы можете проверить, если пользователь является такой же, как пользователь Логгина. Код будет

PostController.php

class PostController extends Controller 
{ 
public function getUpdatePost($post_id) { 

     $post = Post::find($post_id); 
     if($post->user_id !== Auth::user()->id){ 
      abort(403); 
     } 
     return view('posts.edit',['post' => $post]); 
    } 
} 

и файл маршрутов будет

Route::get('/post/{post_id}/edit', [ 
       'uses' => '[email protected]', 
       'as' => 'post.edit' 
     ]); 
1

Великий. Это отлично работает для редактирования. Однако что-то не так с моим индексным представлением (где перечислены все сообщения). Мой код выглядит следующим образом:

public function index($id) 
{ 
    //create a var and store all blog posts from DB   
    $posts = Post::findOrFail($id); 
    if($posts->id !== Auth::user()->id){ 
     abort(403, 'Access denied'); 
    } 

    //return a view and pass in the above var 
    return view('posts.index')->withPosts($posts); 

} 

Сообщение об ошибке на мой взгляд: ErrorException в PostController.php строке 23: Отсутствующий аргумент 1 для App \ Http \ Контроллеры \ PostController :: индекс()

I я не уверен, что делать с индексом ($ id), откуда я беру идентификатор?

Еще раз спасибо

Смежные вопросы