2017-12-13 14 views
0

사용자를 저장하는 테이블이 있습니다. 사용자는 학생, 교사, 교장 또는이 중 한 사람이 될 수 있습니다.이를 위해 역할을 활용합니다 (spatie/laravel-permission 패키지).역할을 기준으로 모델 결정

나는 자신의 논리, 검색어 등을 사용하여 학생, 교사 및 헤드 마스터에게 구체적인 모델을 제공하지만이 모델에 대한 구체적인 표는 제공하지 않습니다.

현재 나는 사용자가 교사가 교사 모델() 함수는 (같은 학생들과 교장 간다) 부팅을 사용하는 것입니다 있는지 확인 :

protected static function boot() 
    { 
     parent::boot(); 

     //Todo: make use of role package to determine if model is teacher or not. 
     static::addGlobalScope('teacher', function (Builder $builder) { 
      $builder->whereExists(function ($query) { 
       $query->select(DB::raw(1)) 
        ->from('teacher_offering') 
        ->whereRaw('teacher_offering.user_id = users.id'); 
      }); 
     }); 
    } 
이 쿼리가 잘 작동

,하지만 난 궁금했다 Spatie가 제공하는 Laravel-permission 패키지를 사용하여이 작업을 단순화 할 수 있습니다.

내 질문은 : 교사 역할이 사용자에게 할당되어 있는지 확인하여 boot() 함수 내에서 쿼리를 바꿀 수 있습니까?

이 패키지로이 문제를 해결할 수 있습니까? 아니면이 쿼리를 사용해야합니까?

답변

0

사용자의 역할을 확인하는 용도는 무엇입니까? 특정 페이지에 대한 액세스를 차단하려는 경우 Middleware을 사용하여 역할을 확인하십시오. 나는 스코프가 이것에 적합하다고 생각하지 않는다. 특정 페이지에 대한 액세스를 방지

$isTeacher = Auth::user()->hasRole('teacher'); 
+0

이미 패키지가 제공하는 미들웨어를 사용하여 덮여 :

spatie/laravel-permission 패키지는 UserHasRoles 특성을 구현 가정하고 hasRole($role) 방법을 제공한다. 교사 모델에 교사가 아닌 다른 사용자가 액세스해야하는 특정 기능이 있기 때문에 사용자가 교사 역할을하는 경우 교사 모델을 사용하려고합니다. 현재 사용자가 데이터베이스의 클래스 (교사 모델의 boot() 함수)에 연결되어 있는지 확인합니다. 사용자에게 교사 역할이 있는지 확인하기 위해 변경하고 싶습니다. 의미가 있습니까? –

+0

@ Y.Jacobs 솔직히, 아니. 특정 기능을 활성화하는 것은 블레이드 템플릿 (예 : 특정 양식이나 버튼 숨기기)과 컨트롤러 (예 : FormRequests 사용)에서 할 수있는 것처럼 보입니다. 특정 역할을 가진 사용자가 특정 페이지에 액세스 할 수 있는지 여부를 확인할 수 있습니다. 기능. 다시 말하면, 당신의 모델은이 논리를 프로그램 할 장소가 아닙니다. – Jeffrey