私は自分でこの答えを見つけようとしてきましたが、それにはあまりにも悪いので、あなたが私を助けてくれることを願ってここに来ました.
次のデータベース テーブルがあります。
user(
    int unsigned id,
    varchar      login
)
group(
    int unsigned id,
    varchar      label
)
right(
    int unsigned id,
    varchar      label
)
user_group(
    int unsigned userId,
    int unsigned groupId
)
user_right(
    int unsigned userId,
    int unsigned rightId,
    boolean      granted
)
group_right(
    int unsigned groupId,
    int unsigned rightId,
    boolean      granted
)
および 3 つの構成パラメーター (PHP が定義) :
- GRANTED_BY_DEFAULT- TRUEまたはにすることができます- FALSE。グループまたはユーザーに対して権限が指定されていない (関連付けテーブルにない) 場合に、権限が付与されているかどうかを示します。
- RESULTING_RIGHTS- MIN_RIGHTSまたはにすることができます- MAX_RIGHTS。結果として生じる権利を決定する際に、「AND」または「OR」演算子を使用するかどうかを示します。たとえば、権限 "r1" に対して、グループ "g1" が TRUE で、グループ "g2" と "g3" が FALSE の場合、"MIN_RIGHTS" で FALSE、"MAX_RIGHTS" で TRUE になります。
- RIGHTS_PRIORITY- USER_OVER_GROUPまたはにすることができます- GROUP_OVER_USER。ユーザー自身の権限がグループの権限をオーバーライドするか、グループの権限がユーザー自身の権限をオーバーライドするかを示します。
これらの 3 つのパラメーターとそのグループを考慮して、ユーザーが実際に持っている権利を見つける単一のクエリを作成したいと思いますが、その方法については本当にわかりません。複数のクエリを作成し、PHP 側で作業の一部を行うこともできますが、AJAX オートコンプリートやその他のものに対してアプリを十分に高速にしたいので、多くのクエリを実行する必要は避けたいと思います。
誰も私を助けたくない、または時間がない場合は理解できます:p読んでくれてありがとう。
EDIT:いくつかのサンプルデータ:
user (id, login) :
1 "Admin"
group (id, label) :
1 "g1"
2 "g2"
3 "g3"
right (id, label) :
1 "r1"
2 "r2"
3 "r3"
user_group (userId, groupId) :
1 1
1 2
user_right (userId, rightId) :
1 1 true
1 2 false
group_rights (groupId, rightId) :
1 1 true
1 2 false
2 1 false
2 3 true
出力は、パラメーターと他のテーブルの行に応じて (right_id, right_label) 行のリストになります。
ユーザー ID および / またはログインは、権限を取得する際に既知のものと見なされます。