2017-12-08 9 views
0

Ich habe vier Tabelle users, groups, posts und group_user. Benutzer können verschiedenen Gruppen folgen. Die group_user table ist für viele-zu-viele-Beziehung.Laravel 5.5: Autorisierung mit Pivot-Tabelle

Jeder Beitrag gehört zu einer Gruppe und einem Benutzer. Ich möchte, dass ein Benutzer nur einen Beitrag in einer Gruppe veröffentlichen kann, wenn er dieser Gruppe folgt. Ich kann leicht überprüfen, if Anweisung verwenden, ob ein Benutzer dieser Gruppe folgt oder nicht. Aber wie kann ich den Benutzer autorisieren, mit Richtlinien zu buchen?

+0

Es ist wirklich zu breit, teilen spezifische Frage mit Code. – C2486

+0

ok, versuchen, einige Informationen darüber zu finden. Wird diese Frage aktualisieren, wo auch immer ich bleibe. –

Antwort

0

Es gibt eine komplexe Lösung für Access Control List. Lesen Sie mehr über die Zizaco Entrust Library. Hier können Sie Berechtigungen für jede Route in Ihrem System festlegen. Durch dieses Routing und die Erlaubnis können Sie einige Gruppen vorbereiten. Thema ist hart, aber wirklich wert zu implementieren: https://github.com/Zizaco/entrust

0

Erstellen Sie eine Richtlinie: php artisan make:policy.

Register Politik:

class AuthServiceProvider extends ServiceProvider 
{ 
    /** 
    * The policy mappings for the application. 
    * 
    * @var array 
    */ 
    protected $policies = [ 
     Post::class => PostPolicy::class, 
    ]; 

In Ihrer Politik der Logik, zum Beispiel:

public function create(User $user, Post $post) 
{ 
    $groupsOfUser = $user->groups()->get(); 

    foreach ($groupsOfUser as $group) { 
     if($group->id == request('groupId'))return true; 
    } 
} 

Und in Ihrem Controller:

public function store(Post $post, $groupId) 
{ 
    $this->authorize('create', $post); 

    Post::create([ 
     'user_id' =>auth()->id(), 
     'group_id' => $groupId, 
     'title' => 'sometitle', 
    ]); 
} 

und ich habe es mit Route getestet:

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

Aber Sie können GroupId über Eingabe erhalten, aber Sie bekommen die Idee.