2014-04-23 2 views
1

여러 개의 관계가 정의 된 User이라는 모델이 있다고 가정합니다 (rolepermissions). 내 사용자 모델에 직접 액세스 할 수있는 방법 컬렉션 또는 관련 권한 컬렉션?Laravel4 모델에서 관련 컬렉션을 얻는 방법

컨트롤러 :

내가 뭘하려고 오전

if (Auth::user()->hasPermission('test')) 
{ // code goes here} 

을 내 모델 :

public function hasPermission($name) 
    { 
     $permission = \Permission::where('name', '=', $name)->get(); 
     $list = ($this->overwrite_permission) ? $this->permissions : $this->role->permissions; 
//here I want to have a collection to use contains() 
     if ($list->contains($permission)) 
     { 
      return true; 
     } 
     return false; 
    } 

답변

2

당신은 대신 수집을 확인하는이 작업을 수행 할 수 있습니다

public function hasPermission($name) 
{ 
    return ($this->overwrite_permission) 
     ? (bool) $this->permissions()->whereName($name)->first() 
     : (bool) $this->role->permissions()->whereName($name)->first(); 
} 

퍼미션 모델이 관련 권한 (사용자 또는 역할에 적합)에 있거나 null을 리턴하면 퍼미션 모델을 반입하므로 부울 값으로 캐스팅하면 작업이 수행됩니다.

어쨌든 코드를 사용하려는 경우, 이것은 선을 변경하는 것입니다 : 당신이 제대로 권한없는 설정 관계가 없다면 코드의

// it returns Collection, while you need Model (or its id) for contains() method 
$permission = \Permission::where('name', '=', $name)->get(); 

// change to: 
$permission = \Permission::where('name', '=', $name)->first(); 

나머지는 괜찮습니다, $리스트는 컬렉션 (참)

+0

클리너 용액 용. –

관련 문제