役割
「一般的な」権限を付与する場合は、ロールで問題ありません。
たとえば、ユーザーがすべてまたはユーザーを管理できるようにする必要がある場合は、そのロールを作成できますROLE_USER_MANAGER
。または、販売を管理する権限を彼に付与する場合は、ROLE_SALES_MANAGER
役割を付与できます。
したがって、基本的に、一部のエンティティに対するアクセス許可の数が一般的に制限されている場合は、ロールを使用します。
たとえば、エンティティ名と ID を含むロールを付与することで、それらを他のものに使用できますROLE_MANAGER_REPOSITORY_23
。カスタム ボーターを使用すると、そのロールを持つユーザーが ID 23 のリポジトリを管理できることを知ることができます。好きじゃない。
ACL
特に個々のモデルに対して、多くの動的権限付与がある場合は、ACL が最適です。通常は、データ ストアからより多くのデータを取得する必要があるため、パフォーマンスが少し低下しますが、この目的にははるかに適しています。
Symfony2 ACLを使用すると、パーミッションの付与と確認が非常に簡単になり、個々のユーザーが相互にパーミッションを付与できるようにすることさえできます。
さらに、 Symfony ACL ドキュメントの紹介部分では、これらのアプローチの両方を示し、それぞれのいくつかの浮き沈みも指摘しています。