これは私が過去にそれを行った多かれ少なかれです:
actions
id unsigned int(P)
description varchar(50) // Delete users, Edit something, etc.
roles
id unsigned int(P)
site_account_id unsigned int(F site_accounts.id)
description varchar(50) // Client Admin, Client User, etc.
roles_actions
id unsigned int(P)
role_id unsigned int(F roles.id)
action_id unsigned int(F actions.id)
site_accounts
id unsigned int(P)
name varchar(50) // Client 1, Client 2, etc.
users
id unsigned int(P)
site_account_id unsigned int(F site_accounts.id)
username varchar(32)
password varbinary(255)
email varchar(255)
users_roles
id unsigned int(P)
user_id unsigned int(F users.id)
role_id unsigned int(F roles.id)
「クライアント管理者」の を作成するrole
と、このロールには、クライアントが持つ可能性のあるすべての権限が付与されます。次にsite account
、新しいクライアントにサインアップするたびに を作成し、「クライアント管理者」の役割を割り当てます。
独自のroles
(site_account_id に関連付けられる) を作成できるようにするコードを記述し、それらのいずれかをactions
それらの new のそれぞれに割り当てさせる必要がありroles
ます。これにより、必要な役割と各役割が持つ権限を完全に制御できます。
また、ユーザーを追加/更新/削除できるようにするコードを作成する必要があります (ここでも、これらの各ユーザーは自分の site_account_id に関連付けられます)。
これにより、各クライアントに属しているロール/ユーザーを簡単に確認できます。クライアントを紛失した場合は、レコードを削除するだけですべてのデータを削除できますsite_accounts
。
これは大まかな例です。このようなものにはさらに多くのことができるので、どれだけきめ細かくしたいかを理解する必要があります。