当我的项目仍然是Laravel 4时,我之前使用Entrust控制Laravel中的ACL,现在使用Laravel 5.2 Entrust不再有效,特别是在路由过滤中。
然后我发现这个包并尝试使用它,但仍然有很多问题,所以为了使它更简单,我将在使用委托时解释我的用例:
首先,我想为文章创建,查看,更新和删除权限,在Entrust中,我将创建create_article,view_article,update_article和delete_article等权限。 但是现在我在Kodeine创建权限时会出现“slug”,所以我试着这样做,就像在文档中说的那样
$permUser = $permission->create([
'name' => 'article',
'slug' => [ // pass an array of permissions.
'create' => true,
'view' => true,
'update' => true,
'delete' => true
],
'description' => 'Manange article'
]);
因此,根据我的阅读,它只是将我的所有文章权限分组到一个地方,并且每个参数视图都有一个slug,创建,更新,删除。
我看到的问题是,如果我想让我的用户只能查看文章,如何根据我在那里创建的权限来做到这一点?
因为从文档到assignPermission只给出了权限名称,这意味着它将包含所有slug,并且它将全部成立?
因此,如果我想让用户只能查看我需要创建类似
的文章 $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'
]);
那么slug的重点是什么 - 它与角色几乎相同但是在slug中有参数吗?
答案 0 :(得分:1)
正如我在你的github问题中所写的那样,我建议你保留所有文章权限,因为你已经拥有了它,在一个大组中,但所有这些都设置为false(请记住,你可能需要更改你的&# 39;你的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'
]);
然后您将新的权限分配给您的用户角色(我假设您已经拥有角色名称'用户'):
$userRole = Role::where('slug', 'user')->first();
$userRole->assignPermission('articles.user');
最后,您将该角色分配给...让您说出已登录的用户:
Auth::user()->assignRole($userRole);
您也可以通过覆盖权限来解决此问题,这可以为用户分配特定的权限值(但是,如果需要,您需要为应用中的每个用户执行此操作,所以我不喜欢这个解决方案完全没有。)
让我们说我们保留我们的大团队:
$permArticles = $permission->create([
'name' => 'articles',
'slug' => [ // pass an array of permissions.
'create' => false,
'view' => false,
'update' => false,
'delete' => false,
],
'description' => 'All articles module permissions'
]);
正如该小组所说,任何带有您的文章权限的rol都将无法在您的文章模块中执行任何操作。假设您的用户角色alredy具有此权限,但您希望某个用户(假设已记录的用户)能够更新文章。您可以将特定的更新权限值设置为true,如下所示:
Auth::user()->addPermission('update.articles', true);
//or
Auth::user()->addPermission('articles', [
'update' => true,
]);
答案 1 :(得分:0)
感谢您的回答,但随着时间的推移,我已经找到了一个符合我需要的完美解决方案。这与我委托的事情没什么不同。
首先,我将为视图文章
创建一个这样的权限$class = 'article';
$permission = new Kodeine\Acl\Models\Eloquent\Permission();
$permUser = $permission->create([
'name' => $class.'_view',
'slug' => [
'view' => true,
],
'description' => 'View '.$class
]);
然后另一个例如创建文章
$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');
我仍然不了解继承功能,我需要快速完成此操作。它可能不是一种理想的方式,但它对我有用。