我想使用gate..Where In user model
进行Laravel授权User.php
public function hasPermission($name)
{
$permission = Permission::where('name','=', $name)->first();
$permissions = \DB::table('role_permission')
->join('permissions', 'permissions.id', '=', 'role_permission.permission_id')
->select('role_permission.*')
->where('role_permission.permission_id', '=',$permission->id)
->get();
if(! $permissions) {
return false;
}
return !! $permission->intersect($this->$permission)->count();
}
在AuthserviceProvider中
public function boot(GateContract $gate)
{
$this->registerPolicies($gate);
$gate->before(function($user, $ability) {
return $user->hasPermission($ability);
});
}
我的表结构如。
用户有姓名,电子邮件,密码,身份证 权限有名称,id 角色有名字,身份证 role_permission具有role_id,permission_id
任何人都可以帮我找出这里的错误吗?
答案 0 :(得分:0)
我想这是因为您可以将intersect
应用于集合,而您却收到错误消息,说明您正在调用它Illuminate\Database\Query\Builder
。
我看到你在$permission
上调用它,它目前是Permission
的记录(模型)。可能这只是一个错字,你想使用$permissions
而不是$permission
。
无论如何,试着更好地解释一下你所寻找的行为是什么,因为它不清楚。
答案 1 :(得分:0)
intersect
方法属于Collection
类。您无法在Model
上使用交叉方法。你可以尝试:
return !! collect([$permission])->intersect($this->$permission)->count();
$ this-> $权限应为
array
或collection