users
、roles
およびの 3 つの MySQL テーブルがありpositions
ます。
表users
はかなり自明です。このテーブルは、、 、などroles
、人が持つ可能性のある役職のリストです。テーブルには、またはなどのブール値のパーミッションの長い配列もあります。ロールのビット値が false (または「0」) に設定されている場合、そのロールにはその権限がありません。janitor
president
manager
roles
access_basement
user_directory_access
注意が必要なのは、ユーザーが複数のロールを持つ可能性があることです。そのため、それらがテーブルによって接続されているのは、単純にとフィールドpositions
のペアです。したがって、次のようなクエリを実行すると:userId
roleId
SELECT * FROM users
LEFT JOIN positions ON users.userId=positions.userId
LEFT JOIN roles ON roles.roleId=positions.roleId
WHERE users.userId=123
次のような結果が得られる場合があります。
+---------+-----------+-----------------+-----------------------+
| name | title | basement_access | user_directory_access |
+---------+-----------+-----------------+-----------------------+
| Bob | Janitor | true | false |
+---------+-----------+-----------------+-----------------------+
| Bob | President | false | true |
+---------+-----------+-----------------+-----------------------+
OR
Bob には 2 つのロールがありますが、それぞれに異なるアクセス権があるため、MySQL クエリ以降の結果とすべての行にわたる論理演算を組み合わせて、次のようなテーブルを作成したいと思います。
+---------+-----------------+-----------------------+
| name | basement_access | user_directory_access |
+---------+-----------------+-----------------------+
| Bob | true | true |
+---------+-----------------+-----------------------+
問題は、選択した複数の MySQL 行に OR 演算子を適用することは可能ですか?
ありがとう!