Laravel 5.2:委托:调用未定义的方法attachPermission
Laravel 5.2: Entrust: Call to undefined method attachPermission
如果不存在,我尝试附加权限,但在 运行 db seed -
后出现错误
<?php
use Illuminate\Database\Seeder;
use App\Role;
use App\Permission;
use App\User;
class AttachRolesAndPermissionsToUsers extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$admin = Role::where('name', 'admin')->first();
$moderator = Role::where('name', 'moderator')->first();
$createPost = Permission::where('name', 'create-post')->first();
$editUser = Permission::where('name', 'edit-user')->first();
// attach role
$adminUser = User::where('email', 'a@gmail.com')->first();
if(!$adminUser->hasRole('admin')) {
$adminUser->attachRole($admin);
}
$moderatorUser = User::where('email', 'b@gmail.com')->first();
if(!$moderatorUser->hasRole('moderator')) {
$moderatorUser->attachRole($moderator);
}
// attach Permission
if(!$adminUser->can(['create-post', 'edit-user'])) {
$adminUser->attachPermissions([$createPost, $editUser]);
}
if(!$moderatorUser->can('create-post')) {
$moderatorUser->attachPermission($createPost);
}
}
}
[BadMethodCallException] 调用未定义的方法 Illuminate\Database\Query\Builder::attachPermission()
改为
$adminUser->perms()->sync([$createPost->id, $editUser->id]);
让我们看看进展如何。
这是错误的实现,权限需要附加到角色而不是用户。
$admin->attachPermissions([$createPost, $editUser]);
$moderator->attachPermission($createPost);
其中 $admin
和 $moderator
是角色对象。
如果不存在,我尝试附加权限,但在 运行 db seed -
后出现错误<?php
use Illuminate\Database\Seeder;
use App\Role;
use App\Permission;
use App\User;
class AttachRolesAndPermissionsToUsers extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$admin = Role::where('name', 'admin')->first();
$moderator = Role::where('name', 'moderator')->first();
$createPost = Permission::where('name', 'create-post')->first();
$editUser = Permission::where('name', 'edit-user')->first();
// attach role
$adminUser = User::where('email', 'a@gmail.com')->first();
if(!$adminUser->hasRole('admin')) {
$adminUser->attachRole($admin);
}
$moderatorUser = User::where('email', 'b@gmail.com')->first();
if(!$moderatorUser->hasRole('moderator')) {
$moderatorUser->attachRole($moderator);
}
// attach Permission
if(!$adminUser->can(['create-post', 'edit-user'])) {
$adminUser->attachPermissions([$createPost, $editUser]);
}
if(!$moderatorUser->can('create-post')) {
$moderatorUser->attachPermission($createPost);
}
}
}
[BadMethodCallException] 调用未定义的方法 Illuminate\Database\Query\Builder::attachPermission()
改为
$adminUser->perms()->sync([$createPost->id, $editUser->id]);
让我们看看进展如何。
这是错误的实现,权限需要附加到角色而不是用户。
$admin->attachPermissions([$createPost, $editUser]);
$moderator->attachPermission($createPost);
其中 $admin
和 $moderator
是角色对象。