2017-02-09 2 views
0

Я хочу сделать Laravel Авторизация с помощью gate..Where В модели пользователяПризыв к неопределенным метод Осветите Database Query Builder :: пересекаются()

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); 
      }); 

     } 

My Table structure like.

Пользователь имеет имя, адрес электронной почты, пароль, ID разрешение имеет имя, идентификатор роль имя, идентификатор role_permission имеет ROLE_ID, permission_id

может кто-нибудь помочь мне узнать, что ошибка здесь?

ответ

0

Я предполагаю, что это потому, что вы можете применить intersect к коллекции, в то время как вы получаете ошибку о том, что вы вызываете его на Illuminate\Database\Query\Builder.

Я вижу, вы вызываете его на $permission, что в настоящее время записи (а модель) из Permission. Вероятно, это просто опечатка, и вы хотите использовать $permissions вместо $permission.

В любом случае, попробуйте лучше объяснить, какое поведение вы ищете, потому что это непонятно.

0

intersect метод принадлежит Collection класс. Вы не можете использовать . Пересеките метод на Model. Вы можете попробовать с помощью:

return !! collect([$permission])->intersect($this->$permission)->count(); 

$ это -> $ разрешение должно быть array или collection

Смежные вопросы

 Смежные вопросы