2016-07-04 19 views
1

Ich bin neu in Laravel (5.2) und anschließend diese große Serie https://www.youtube.com/watch?v=Zxmf0n2sC1I&index=34&list=PLwAKR305CRO-Q90J---jXVzbOd4CDRbVxLaravel 5 Benutzerberechtigungen

jemand mich in die richtige Richtung zeigen kann, wie die Authentifizierung einrichten, die Benutzer können nur bearbeiten registriert/ihre eigenen Beiträge löschen.

zB: Angemeldete Benutzer „A“ ist nicht erlaubt mir aushelfen Beiträge von Benutzer B

Dank zu bearbeiten.

Antwort

1

Wenn Ihre Posts-Tabelle eine user_id hat, dann können Sie überprüfen, ob dieser Benutzer der gleiche wie der angemeldete Benutzer ist. Zum Beispiel:

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: Aktualisiert mit einem Index-Methode wie in den Kommentaren angefordert.

routes.php

Route:get('posts', [email protected]); 
Route:get('post/{id}/edit', Po[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

Großartig. Dies funktioniert perfekt zum Bearbeiten. Bei meiner Indexansicht (wo alle Beiträge aufgelistet sind) ist jedoch etwas schief gelaufen. Mein Code sieht folgendermaßen aus: public function index ($ id) { // Erstelle eine Variable und speichere alle Blogeinträge von DB $ posts = Post :: findOrFail ($ id); if ($ posts -> id! == Auth :: Benutzer() -> id) { abort (403, 'Zugriff verwehrt'); } Rückansicht ('posts.index') -> withPosts ($ posts); } Und die Fehlermeldung ist: "ErrorException in PostController.php line 23: Fehlendes Argument 1 für App \ Http \ Controllers \ PostController :: index() " –

+1

Per Konvention wird die Index-Methode einer Ressource für die Auflistung verwendet und hat keine URL-Parameter, also versuchen Sie es bekomme einen '$ id' -Parameter und Laravel sagt, dass dieser Parameter fehlt. Ich werde die Antwort einschließlich einer Indexmethode aktualisieren. –

0

ich Ihr Beitrag hat eine user_id dann können Sie überprüfen, ob der Benutzer die gleiche wie die loggin Benutzer ist. Der Code wird

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]); 
    } 
} 

und Ihre Routen-Datei wird

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

groß sein. Dies funktioniert perfekt zum Bearbeiten. Bei meiner Indexansicht (wo alle Beiträge aufgelistet sind) ist jedoch etwas schief gelaufen. Mein Code wie folgt aussieht:

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); 

} 

Die Fehlermeldung ist aus meiner Sicht: Error in PostController.php Zeile 23: Fehlendes Argument 1 für App \ Http \ Controllers \ Postcontroller :: index()

I Ich bin mir nicht sicher, was ich mit dem Index machen soll ($ id), woher bekomme ich die ID?

Danke nochmal