문서는 속성이 아닌 개체의 액세스를 확인하는 방법 만 설명합니다. 내가 선택한 결정에 대해 설명하겠습니다. 유권자 또는 ACL 중에서 선택할 때. 다음으로 (Hierachy) 유권자를 통해 목표를 달성하는 방법에 대해 설명하겠습니다. 사용자가 단순히이 나 역할에 따라 객체에 대한 액세스 권한이없는 경우
는 액세스가 방화벽을 사용하여 수행하고 간단한 솔루션입니다 수 있습니다.
그러나 액세스가 특정 규칙에 따라 개체 단위로 결정되는 경우 유권자를 사용해야합니다. 예를 들어 사용자는 게시물을 만들 때만 수정할 수 있습니다. 그러나 운영자는 항상 게시물을 편집하는 데 철저해야합니다.
가장 어려운 액세스 제어는 사용자에게 다른 사용자가 액세스 권한을 부여 할 수있는 경우입니다. 예를 들어, 관리자는 사용자를 게시물에 할당하고 편집 권한을 부여 할 수 있습니다. 이것은 사용자의 역할에 따라 액세스를 결정할 수없는 솔루션입니다. 개체에 대해 사용자별로 액세스/사용 권한을 저장해야합니다. 이것은 ACL이하는 일입니다. 사용자 당 데이터베이스의 개체에 대한 사용 권한을 저장합니다.
문제에 관해서는
. 대부분 이러한 종류의 사용은 코드 자체에서 처리됩니다. 엔티티에 대해 여러 가지 형식을 많이 보았습니다.
UserPostFormType
,
ModeratorPostFormType
및
AdminPostFormType
. 보시다시피 이것은 매우 건조하지 않습니다. 코드의 사용자 유형을 확인하십시오.
계층 구조를 사용하여 역할을 정의하고 관리하는 것이 좋습니다.
조치 당 속성마다 별도의 역할을 정의하십시오. 따라서 다음 역할을 정의하십시오.
ROLE_ID_VIEW
ROLE_ID_EDIT
ROLE_TITLE_VIEW
ROLE_TITLE_EDIT
...
그런 다음이 역할을 올바른 사용자 역할에 할당 할 수 있습니다.
security:
role_hierarchy:
ROLE_USER: [ROLE_TITLE_VIEW, ROLE_CONTENT_VIEW, ROLE_CONTENT_EDIT]
ROLE_MODERATOR: [ROLE_USER, ROLE_TITLE_EDIT]
ROLE_ADMIN: [ROLE_MODERATOR, ROLE_ID_EDIT, ROLE_ID_VIEW]
계층 적 유권자를 사용하여 사용자가 특정 속성을 수정하거나 볼 수 있는지 확인할 수 있습니다. 가장 깨끗한 해결책은 현재 사용자가 가지고있는 권한을 기반으로 폼에 필드를 추가하는 Listener 폼을 만드는 것입니다.
고마워, 나는 (사용자 역할을 만들지 만 개별 필드없이) 비슷한 방식으로이 문제를 해결했다. . 당신의 대답이 더 합리적입니다. –