私の意見では、あなたのスキーマは解決策を示しています。
私が考えることができる最も単純なコーディングシナリオは次のとおりです。
My user is logged in
Get the user's company
Paginate all items attached to this company
あなたはACEシステムを持っていませんが、それはあなたの質問に従って仕事をします.
柔軟性をさらに高めたい場合は、とUserGroup
の中間にエンティティを追加します。に関連し、についても同じことが言えます。このエンティティには、JSON でエンコードされた文字列で ACE データを保持する追加の列を含めることができるため、グループを取得するたびにグループの ACE に直接アクセスできます。Company
User
Item
Item
Company
UserGroup
User
UserGroup
ACL/ACE について一般的に学んだことの 1 つは、統合を計画するには適切な時間を取らなければならないということです。そうしないと、保守が非常に難しくなります。
最後の質問に答えるために、ACL のベスト プラクティスはありません。Symfony2 には非常に一般的な ACL システムがあり、拡張性が低い可能性がありますが、ほとんどの要件 (すべてではないにしても) に適合します。Symfony2 ACL/ACE システムは素晴らしいと思いますが、パフォーマンスは素晴らしいとは言えません。
機会があれば、Symfony ACL/ACE システムを理想的なキャッシング層でラップできます。ただし、ホストで Memcached や Redis などのソリューションのインストールが許可されていない場合、このソリューションは使用できません。