이전에 ORM은 특정 속성에 대한 액세스를 제한하는 것처럼 특정 속성 표시를 허용하는 클래스 속성에 데이터베이스 열을 직접 매핑했습니다. 암호.Laravel/Eloquent 모델 속성 가시성
Eloquent와 함께 나는 데이터베이스 열이 가시성을 포함하지 않는 내부 속성 배열에 매핑되기 때문에 이것을 복제 할 수 없습니다.
사용자 암호에 대한 액세스 범위를 개체 (예 : 개인)로만 제한하고자합니다.
클래스 속성을 가시성으로 설정하면이 속성이 Eloquent 모델 특성의 범위 밖에 있으므로 속성이 열에 매핑되지 않으므로 작동하지 않습니다.
Eloquent $ hidden 및 $ guarded 속성은 직접 출력이 아닌 대량 출력 (toArray, toSSON) 및 질량 할당을 처리하므로 작동하지 않습니다.
나는 혼합 된 결과를 얻기 위해 접근 자/변경자 (getters/setters)를 사용하려고 시도했다.
Eloquent \ Model-> getAttribute 메서드에서 호출 된 접근 자 메서드 (예 : getPasswordAttribute)가 public/protected가 항상 작동하고 private가 항상 관계없이 실패하기 때문에 접근 자에 대한 가시성 지정이 작동하지 않습니다. 그것으로부터 액세스 한 속성
그러나 Eloquent 접근자가 속성을 모두 반환하는 것을 중지하면 $ user-> password 또는 $ user-> getAttribute ('password')에 대한 요청이 실패하고 다음으로 정의 된 가시성을 가진 별도의 메소드가 있습니다. Eloquent 속성 배열에서 직접 허용 된 범위에서만 속성을 직접 반환합니다.
/**
* Return password string only for private scope
* @return string
*/
private function getPassword()
{
return $this->attributes['password'];
}
/**
* Don't return password with accessor
* @param string $password Password
* @return void
* @throws Exception
*/
public function getPasswordAttribute ($password)
{
throw new Exception ('Password access denied');
}
이 동일한 접근법은 setter 메소드 가시성을 원하는 모든 사람을위한 뮤 테이터 (설정자)에도 적용됩니다.
이 모양이 맞습니까? 아니면 이것을 처리하는 "Laravel-Approved"방법이 더 좋습니까? :)
'hidden'은 array/json으로 모델을 출력하는 데 사용됩니다. 그것을 처리하는 'laravel'방식이 없으며 왜 그걸 원하니? –
나는 숨어서 당신이 여전히 컨트롤러에서 (그가 생각하는) $ user-> password를 할 수 있다는 것을 확신한다. –