ユーザーはグループに所属できます。また、アイテム/製品には、そのアイテムを表示できるグループが割り当てられます。割り当てられたグループのいずれかに属している場合、ユーザーはそのアイテムを見ることができます。
パブリック (グループに属さない匿名ユーザー) もグループレス ユーザー (どのグループにも属さないログイン ユーザー) にもアイテムを表示したくありません。しかし、どのグループにも属しているユーザーがアイテムを見ることができるように、アイテムに「すべて/任意のグループ」属性を割り当てることができるインターフェイスが必要です。
この割り当てをどこに/どのように保存すればよいですか?
ps この手法は他のエンティティにも拡張されると思います。たとえば、ファイルをカテゴリに割り当て、グループをカテゴリにリンクします。そのため、ファイルが「すべて/任意のカテゴリ」によって表示可能としてマークされている場合、ユーザーが (グループおよびグループ カテゴリを介して) 少なくとも 1 つのカテゴリにリンクされている場合、ファイルはそれらに表示されます。
決断:
選択は、エンティティ グループ テーブルの行として実装するか、エンティティ テーブルのフィールドとして実装するかであると思われました。選択された答えは前者を使用しました。
そして、テーブル内のグループ メンバーシップを管理するか、JOIN 条件を追加します。選ばれた回答は前者を使用しましたが、後者を使用します。クエリと使用法の間に間接性を置いているので、(いつ) パフォーマンスに問題がある場合は、使用法を変更せずに (提案されているように) 下にあるマネージド テーブルに変更できるはずです。
「管理者」、「ユーザー」などの他の特別なグループがあります。これらは、エンティティごとに特別な変数フィールドを処理するよりも、同じ概念 (グループのリストが基本) に簡単に適合できます。
皆さんありがとう。