2016-11-16 14 views
-1

私のプロジェクトがまだLaravel 4で、Laravel 5.2のEntrustがルートフィルタリングで特に機能しなくなったときに、LaravelでACLを制御するためにEntrustを使用しています。Laravel ACL Kodeineの許可slug関数

そして私は私が委託を使用するときに、私は私のユースケースを説明することがよりシンプルにするために、このパッケージを見つけて、それを使用しようとしているが、それでも問題の多くを得た:

まず私が作りたいですEntrustでは、create_article、view_article、update_article、およびdelete_articleのようなパーミッションを作成します。 しかし、今Kodeineで、私は許可を作成するときに「スラッグ」がある私は、ドキュメントのようにこれを実行しようとしましたので、私はそれだけで一つの場所に私の記事のアクセス許可のすべてをグループ化されます読んだものからそう

$permUser = $permission->create([ 
     'name'  => 'article', 
     'slug'  => [   // pass an array of permissions. 
      'create'  => true, 
      'view'  => true, 
      'update'  => true, 
      'delete'  => true 
     ], 
     'description' => 'Manange article' 
    ]); 

を言うと、各パラメータの表示、作成、更新、削除でスラッグがあります。

私が見ている問題は、記事を閲覧できるユーザーだけにしたい場合は、そこに作成したアクセス許可に基づいて行う方法です。

ドキュメントから、assignPermissionには許可名しか与えられないので、そこにすべてのスラッグが含まれていることを意味します。

私は、ユーザーが唯一の記事を見ることができるようにしたいのであれば、私は

$permUser = $permission->create([ 
     'name'  => 'article_view', 
     'slug'  => [   // pass an array of permissions. 
      'view'  => true, 
     ], 
     'description' => 'view article' 
    ]); 

のようなものを作成する必要があると私は、ユーザーが唯一の記事を作成することができるようにしたいならば、私は

を作成する必要がありますを意味します
$permUser = $permission->create([ 
     'name'  => 'article_create', 
     'slug'  => [   // pass an array of permissions. 
      'create'  => true, 
     ], 
     'description' => 'create article' 
    ]); 

それでは、スラッグのポイントは何ですか?それはちょうどロールのようなものですが、スラッグのパラメータと同じですか?

+0

私はこの質問で多くのケースエラーを修復しました(そして私はあなたの答えに同じ問題があることに気付きました)。ここに掲載された記事は読者の便宜のために書かれているものですから、もっと多くの努力を書いていただければ幸いです。あなたが携帯電話から書いているのであれば、あなたの質問と回答を構成するときにも、文例を使用してください - ありがとう! – halfer

答えて

0

あなたのgithubの問題に書いたように、大規模なグループではすべての記事のアクセス許可を維持することをお勧めしますが、すべてがfalseに設定されています(あなたの 'あなたのacl設定ファイルの中の "most_permissive_wins"変数)。 Inheritanceを使用してユーザーロールの「子」グループアクセス許可を作成し、ユーザーに必要なすべてのアクセス許可をtrueに設定することができます。その子グループをあなたのユーザーの役割(大きなものではない)に割り当て、ユーザーの役割を特定のユーザーに割り当てることができます。

$permArticles = $permission->create([ 
     'name'  => 'articles', 
     'slug'  => [   // pass an array of permissions. 
      'create'  => false, 
      'view'  => false, 
      'update'  => false, 
      'delete'  => false, 
     ], 
     'description' => 'All articles module permissions' 
    ]); 

、あなたのようなものを作成することができます:あなたはあなたの新しいアクセス許可は、ユーザーの役割に割り当てる

$articlesPermUser = Permission::create([ 
      'name'  => 'articles.user', 
      'slug'  => [ // an array of permissions only for student 
       'view' => true, 
      ], 
      // we use permission inheriting. 
      'inherit_id' => $permArticles->getKey(), 
      'description' => 'user articles permissions' 
     ]); 

を(私はあなたがalredy持っていると仮定しています私の答えを明確にするために、あなたはこのグループを持って言うことができます役割名「ユーザー」):

$userRole = Role::where('slug', 'user')->first(); 
$userRole->assignPermission('articles.user'); 

そして最後に、あなたがする...言わせてその役割を割り当て、あなたのログインユーザー:

Auth::user()->assignRole($userRole); 

また、この問題を解決するには、権限を上書きすることができます。これは特定の権限値をユーザーに割り当てることで行うことができます(ただし、必要に応じてアプリ内の各ユーザーごとに行う必要がありますこの解決策はまったくありません)。このグループはassginedあなたの記事の権限を持つ任意のROLがあなたの記事モジュールで何かをすることはできません、言うように

$permArticles = $permission->create([ 
      'name'  => 'articles', 
      'slug'  => [   // pass an array of permissions. 
       'create'  => false, 
       'view'  => false, 
       'update'  => false, 
       'delete'  => false, 
      ], 
      'description' => 'All articles module permissions' 
     ]); 

は、我々の大きなグループを維持するとしましょう。あなたのユーザロールalredyがこの権限を持っているとしますが、特定のユーザ(ログされたユーザ)に記事を更新させたいとします。あなたはそのようにtrueに特定の更新許可値を設定することができます。

Auth::user()->addPermission('update.articles', true); 
//or 
Auth::user()->addPermission('articles', [ 
    'update' => true, 
]); 
0

は答えてくれてありがとうしかし、時間をかけて、私はすでに私は必要なものと一致する完璧な解決策を見つけます。私が委託していることとあまり変わりません。

だから、最初、私はちょうどビューの記事

$class = 'article'; 
$permission = new Kodeine\Acl\Models\Eloquent\Permission(); 
$permUser = $permission->create([ 
    'name'  => $class.'_view', 
    'slug'  => [ 
     'view' => true, 
    ], 
    'description' => 'View '.$class 
]); 

ため、このような権限を作成し、その後、例えば、別の1の記事

$class = 'article'; 
$permission = new Kodeine\Acl\Models\Eloquent\Permission(); 
$permUser = $permission->create([ 
    'name'  => $class.'_create', 
    'slug'  => [ 
     'create' => true, 
    ], 
    'description' => 'Create '.$class 
]); 

以降だけのために、ユーザーロールにこれらの権限を割り当てを作成します例この記事のユーザーを閲覧できるようにするには

$roleAdmin = Kodeine\Acl\Models\Eloquent\Role::where('name','=','user_1'); 
$roleAdmin->assignPermission('article_view'); 

I st継承機能について理解していないので、すぐにこれを行う必要がありました。それは理想的な方法ではないかもしれないが、それは私のために働く。

+0

あなたのニーズに合ったソリューションは、あなたのプロジェクトの締め切りがかなり近くなったときに歓迎します。ご挨拶! –

関連する問題