사용자가 페이지에 액세스 할 수 있는지 여부를 확인하는 정책에 메소드가 있습니다. 현재 사용자와 함께 페이지의 이름은 정책의 메소드의 매개 변수입니다 :라라 벨 정책 확인
public function pageAllowed(User $user, string $page)
{
return $this->allGranted($user) || $user->hasPermission(self::PREFIX_PAGE . '.' . $page);
}
문제는 내가 보통 내가 할 경우, 블레이드에서 정책을 확인할 수 없다는 것입니다
@can('page-allowed', [Auth::user(),'page.name'])
<li ng-class="{ active: properties.isActive('/feedback')}"><a href="#/feedback">Feedback</a></li>
@endcan
다음 Laravel 때문에이 메소드를 호출하는 방식 정책의 메소드를 호출하는 사용자 PARAM를 복제, \Illuminate\Auth\Access\Gate::resolvePolicyCallback
를 참조 라인 388 :
return call_user_func_array(
[$instance, $ability], array_merge([$user], $arguments)
);
당신은 병합 볼 수 있듯이 ■ 전달 된 매개 변수로 해결 된 사용자 (추가로 자체를 해석 함). 처음 전달 된 매개 변수는 현재 사용자입니다. 두 번째 페이지의 이름입니다. 정책의 메소드에 전달 된 다음 파라미터로 끝납니다 : User, User, 'page.name'
. 처음 두 매개 변수는 동일하며이 중복을 제거하려고합니다.
블레이드에서 사용자를 전달하지 않아도 기쁠 것입니다. 그러나이 경우 Laravel은 처음 전달 된 매개 변수로 정책을 조회하므로 정책을 해결할 수 없습니다! 라인 (346), \Illuminate\Auth\Access\Gate::firstArgumentCorrespondsToPolicy
참조 : 내가 처음 PARAM로 사용자를 통과하지 못한 경우에 따라서
return is_string($arguments[0]) && isset($this->policies[$arguments[0]]);
, 그것은 페이지 이름으로 정책을 해결하려고합니다. 나는 완전히 혼란스러워. 제발 도와 줘. 나는 서투른 솔루션을 발견했습니다
UPDATE는 정책() 도우미
@if(policy(Auth::user())->pageAllowed(Auth::user(),'feedback'))
<li ng-class="{ active: properties.isActive('/feedback')}"><a href="#/feedback">Feedback</a></li>
@endif
대신 @can 문 문 @if 블레이드를 사용합니다. 하지만 내가 뭘 잘못하고 있는지 궁금 하네.