2012-02-24 2 views
1

엔티티 Floor 및 LeaseTerm이 있습니다. 층에는 많은 LeaseTerm이있을 수 있습니다.Symfony2/DC2/PHP : 사용자가 누군가 elses 엔티티를 만들지 못하도록하십시오.

내 LeaseTerm CREATE 양식에 숨겨진 floor_id 필드가 있습니다.

내 질문은 : 사용자가 floor_id 필드를 직접 변경하지 않고 자신이 소유하지 않은 바닥 (자체 소유자가있는 바닥)에 대해 LeaseTerms를 만드는 것을 어떻게 효과적으로 방지 할 수 있습니까?

답변

3

개념적으로 '방법'은 제출시 floor_id의 유효성을 검사하여 현재 사용자가 바닥을 소유하고 있는지 확인합니다. 이론적으로는 여전히 ID를 변경하는 경우에도 액세스 권한이있는 한 조작은 여전히 ​​유효합니다 (그렇지 않은 경우 제출 컨텍스트에서 추가 유효성 검사가 필요할 수 있음).

Symfony 2의 특정 구현으로 컨트롤러의 로직을 직접 사용하거나 'Data Transformer'및/또는 Custom Validator의 도움을 받아 구현할 수 있습니다.

희망이 도움이됩니다.

+0

Symfony 2의 맥락에서, 로그인 된 users_id와 $ floor-> getOwner() -> getId()를 비교해야할까요? 일치하지 않으면 예외를 throw하는 것이 좋습니다. – Tool

+0

예, 그 아이디어가 될 것입니다 :). 당신은 아마 예외 예를 던지기를 원할 것입니다 - 당신은 나중에 어떤 종류의 403 Forbidden, 404, 또는 다른 커스텀 응답으로 그것을 호출하기 위해 신경 쓰는 'Input Exception'이나 무엇이든 처리 할 수 ​​있습니다. – jstephenson

관련 문제