sql >> Databasteknik >  >> RDS >> Mysql

Lagra applikationsbehörigheter i en databas

Jag skulle göra på det här sättet.

table name: permission
columns: id, permission_name

och sedan kan jag tilldela flera behörigheter till användaren med hjälp av en många till många relationstabell

table name: user_permission
columns: permission_id, user_id

Den här designen gör att jag kan lägga till så många behörigheter som jag vill och tilldela det till så många användare som jag vill.

Även om ovanstående design passar dina krav, har jag min egen metod för att implementera ACL i min applikation. Jag lägger upp det här.

Min metod för implementering av ACL går så här:

  1. Användaren kommer att tilldelas en roll (admin, gäst, personal, offentlig)
  2. En roll kommer att ha en eller flera behörigheter tilldelade dem (user_write, user_modify, report_read) etc.
  3. Tillstånd för användaren kommer att ärvas från rollen som han/hon har
  4. Användaren kan tilldelas manuell behörighet förutom behörigheten som ärvts från rollen.

För att göra detta har jag kommit på följande databasdesign.

role
I store the role name here 
+----------+
| Field    |
+----------+
| id       |
| role_name |
+----------+

permission:
I store the permission name and key here 
Permission name is for displaying to user.
Permission key is for determining the permission.
+----------------+
| Field          |
+----------------+
| id             |
| permission_name |
| permission_key  |
+----------------+

role_permission
I assign permission to role here 
+---------------+
| Field         |
+---------------+
| id            |
| role_id       |
| permission_id |
+---------------+

user_role
I assign role to the user here 
+---------------+
| Field         |
+---------------+
| id            |
| user_id       |
| role_id       |
+---------------+

user_permission
I store the manual permission I may allow for the user here 
+---------------+
| Field         |
+---------------+
| id            |
| user_id       |
| permission_id |
+---------------+

Detta ger mig mer kontroll över ACL. Jag kan tillåta superadmins att tilldela behörighet själva, och så vidare. Som jag sa detta är bara för att ge dig idén.



  1. GROUP BY returnerar den första posten

  2. mysql-frågeresultat till php-array

  3. Hur man förhindrar anslutningstidsgränser för stora MySQL-importer

  4. Får konstiga tecken när man hämtar värde i mysql-databasen