2017-12-08 9 views
0

私は4つのテーブルusers,groups,postsおよびgroup_userを持っています。ユーザーは異なるグループに従うことができます。 group_user tableは多対多の関係です。Laravel 5.5:ピボットテーブルによる承認

すべての投稿はグループとユーザーに属します。私は彼がそのグループに従っている場合、ユーザーはグループに投稿を投稿することができます。ユーザーがグループに従うかどうかは、ifステートメントを使って簡単に確認できます。しかし、ポリシーを使用してユーザーに投稿を許可するにはどうすればよいですか。

+0

そのコードが実際に広すぎる、具体的な問題を共有しています。 – C2486

+0

これについての情報を調べようとしています。どこでも私はこの質問を更新します。 –

答えて

0

アクセス制御リストには複雑なソリューションがあります。 Zizaco Entrust Libraryについて読むここでは、システム内の各ルートのアクセス許可を設定できます。そのルーティングと許可によって、少数のグループを準備することができます。 トピックは難しくありませんが、実装する価値があります。 https://github.com/Zizaco/entrust

0

ポリシーを作成してください:php artisan make:policy

登録ポリシー:ポリシーのロジックで

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

、例えば:

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

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

そして、あなたのコントローラーで:

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

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

と私はルートでそれをテストしています:

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

しかし、あなたは入力を介してgroupIdを取得している可能性がありますが、あなたはそのアイデアを得ます。