0

現在、ユーザーの権限と役割の使用を必要とするWebアプリを設計中です。役割はSQLデータベース内に格納されます(MS SQLを使用しますが、これは実装に依存しない設計である必要があります)。

ユーザーが複数の役割を持つことを許可するための標準的な方法は何ですか。必要に応じて「1対多」の関係になります。

私が概念的に思いついたのは、ユーザーがその役割を持っているかどうかを判断するためにビットフラグを使用するintフィールドのアイデアです。

User Group | Permission Mask | Value
-------------------------------------
Basic      | 0 0 0 0 1       | 1
Advanced   | 0 0 0 1 0       | 2
...        |    ...          | ...
Admin      | 1 0 0 0 0       | 16

このようにして、PHP側の認証で、ユーザーがその役割に属しているかどうかをすばやく計算できます。これで私が目にする最大の欠点は、読みやすさと理解です。この設計上の決定に関与していない人にとって、メンテナンス/アップグレード(新しい役割)が発生したときに何が起こっているのかを理解できるでしょうか?

これは私のニーズに適していますか?ユーザーが複数の役割/グループを持つことを可能にする、より標準化された方法はありますか?

4

2 に答える 2

3
User
------------
Id
Name


Roles
-----------
Id
Name


UserRoles - the UserID,RoleID combination has to be unique
-----------
UserId,
RoleId


Groups
------------
Id
GroupName


UserGroups - UserID, GroupID combination has to be unique
--------------
UserId
GroupId

サンプルデータ

UserRoles
----------------------------------------------
UserID  | RoleID
--------------------------
123       ADMIN
123       EDITOR
124       SITE-USER

クエリ

-- if no rows returned, then user does not belong to role
Select 1 From UserRoles Where UserID=123 AND RoleID='ADMIN'

-- get user roles
Select ur.ID, ur.Name From UserRoles ur
JOIN Role r ON ur.RoleID = r.RoleID
JOIN Users u ON ur.UserID = u.UserID
WHERE u.UserID = 123
于 2012-11-05T19:27:37.103 に答える
1

簡単なことをする必要があります。それは*-*関係です、なぜデータベースにそのように実装しませんか?これらの役割を個々のユーザーにマップするために必要なテーブルはあと2つだけで、新しい役割を簡単に追加できます。これは、潜在的な新規参入者にとって意味があります。もちろん、最初に機能への役割アクセスをハードコーディングする必要がありますが、より簡単なアップグレードパスがあり、すべてを構成可能にしたい場合があります。

于 2012-11-05T19:31:56.367 に答える