4

そのため、基本的なユーザー システムを作成しようとしており、このシステム内でユーザーが複数の役割を持つことができるようにしたいと考えています。

たとえば、次のような役割があるとします: 管理者、イベント主催者、寄付者

これらの複数の役割をユーザーに割り当て、特定の権限を表示するためにこれらの役割のいずれかがあるかどうかを確認する最良の方法は何ですか?

1 人あたり 1 つのロールのみである場合は、管理者 = 10、オーガナイザー = 5、寄付者 = 1 を割り当ててから、if ステートメントを実行して、MySQL データがいずれかと等しいかどうかを確認するだけなので、問題にはなりません。それらの3つの数字の。

MySQLフィールドを追加して「管理者、寄付者」と入力する方法があるとは想像できません。したがって、そのユーザーはこれらの両方の役割を持つことになりますか?

3 つの個別のフィールドを作成し、それらのフィールドに 0 または 1 を入力して、それぞれを個別にチェックする必要があるのは単なるケースですか?

4

3 に答える 3

12

複数のテーブルを使用して結合します。

User
--------------
id    name
 1    test

Role
--------------
id    name
 1    Donator
 2    Organizer
 3    Administrator

User_Role
--------------
id    user_id    role_id
 1    1          1
 2    1          3


SELECT * FROM User u 
    LEFT JOIN User_Role ur ON u.id = ur.user_id
    LEFT JOIN Role r ON ur.role_id = r.id
WHERE r.name = "Administrator";

ロールが 3 つしかなく、覚えやすいことがわかっている場合、クエリはより簡単になります。

SELECT * FROM User u LEFT JOIN User_Role ur ON u.id = ur.user_id WHERE ur.role_id = 3;
于 2012-10-19T18:24:01.757 に答える
7

rolesusers、およびusers_rolesテーブルが作成されます。

rolesテーブルには、ユーザーが持つことができるさまざまなロールが保持されます。サンプル データでは、管理者ロールと寄付者ロールを宣言しました。

roles
    id             unsigned int(P)
    description    varchar(15)

+----+---------------+
| id | description   |
+----+---------------+
|  1 | Administrator |
|  2 | Donator       |
| .. | ............. |
+----+---------------+

そしてもちろん、ユーザーに関する情報を保存する必要があります。

users
    id          unsigned int(P)
    username    varchar(32)
    password    varbinary(255)
    etc.

+----+----------+----------+-----+
| id | username | password | ... |
+----+----------+----------+-----+
|  1 | bob      | ******** | ... |
|  2 | mary     | ******** | ... |
| .. | ........ | ........ | ... |
+----+----------+----------+-----+

最後に、テーブルで 2 つを結合しusers_rolesます。bob私のサンプル データでは、それが寄付者でありmary、管理者と寄付者の両方であることがわかります。user_idrole_idはどちらもそれぞれのテーブルへの外部キーであり、一緒になってこのテーブルの主キーを形成します。

users_roles
    user_id    unsigned int(F user.id)\_(P)
    role_id    unsigned int(F role.id)/

+----+---------+---------+
| id | user_id | role_id |
+----+---------+---------+
|  1 |       1 |       2 |
|  2 |       2 |       1 |
|  3 |       2 |       2 |
| .. | ....... | ....... |
+----+---------+---------+

このようにして、ユーザーは無制限の数の役割を持つことができます。

于 2012-10-19T18:23:01.737 に答える