, 나는이Laravel 중첩 된 리소스 보안
route()->resources('user', 'UserController');
route()->resources('user.place', 'PostController');
route()->resources('user.place.picture', 'PictureController');
모든 것이 잘 작동처럼 자원을 중첩, 나는 때마다 함께 등 사용자의 ID를 전달 ...
트릭은 장소에 올 때입니다. 이것이 내가 너라면 내가 편집하고 몇 가지 작업을하는 버튼을 보여줍니다. 그래서 $place.user_id == $user.id
에 버튼이 표시되는지 확인합니다.
예를 들어 내 장소에 액세스하기 위해 Place.show에 대해 /user/1/place/2
이라는 URL을 가지고 있기 때문에 조금 재생 한 후.
저는 소유자이기 때문에 버튼을 사용할 수는 있지만 수정할 수는 있지만 다른 사용자 (예 : user_id 2)가 동일한 URL을 사용하여 내 장소를 볼 수는 있지만 아무 것도 수정할 수는 없지만 장소를 볼 수는 있습니다.
내가 찾은 것은이 사용자가 동일한 URL을 사용하지만 user_id를 광산으로 변경하면 해당 장소에 대한 전체 액세스 권한을 가질 수 있다는 것입니다.
그래서이 방지하기 위해 나는 다른 조건을 추가 :이 문제를 방지 할 수있는 솔루션이 있다면 나는 중첩 된 자원의 모든 메소드를 보호해야하는 경우가 오래되고 있기 때문에Auth::user()->id == $user->id
내가 궁금하고있어,이다 구현하는 것은 추악합니다. 또한 다음 레벨로 올 때 user.place.picture
. 나는 내가 갈 때마다 또 다른 보안 계층을 추가해야한다고 생각한다. $picture->place_id == $place->id
등등.
그래서 사용자가 올바른 사용자, 장소, 사진 ID를 클릭 할 수 있도록 링크를 인쇄하면 하나의 ID가 수정되었는지 확인하거나 아무 것도 확인하지 않습니다. 마지막 요소가 수정되면 다른 요소를 검색하므로 아무런 문제가 없습니다. 그러나 부모님의 이드를 수정하면 위험 할 수 있습니다. 특히 액세스 할 때 부여해야합니다.
내가 놓친 간단한 해결책이 있기를 바랍니다.
정책 (https://laravel.com/docs/5.4/authorization)을 확인하십시오. – Robert