sql >> Databáze >  >> RDS >> Mysql

Ukládání oprávnění aplikace do databáze

Udělal bych to takto.

table name: permission
columns: id, permission_name

a poté mohu uživateli přiřadit více oprávnění pomocí tabulky vztahů mnoho k mnoha

table name: user_permission
columns: permission_id, user_id

Tento návrh mi umožní přidat tolik oprávnění, kolik chci, a přidělit je tolika uživatelům, kolik chci.

Zatímco výše uvedený návrh odpovídá vašemu požadavku, mám vlastní metodu implementace ACL ve své aplikaci. Zveřejňuji to zde.

Moje metoda implementace ACL vypadá takto:

  1. Uživateli bude přidělena role (administrátor, host, personál, veřejnost)
  2. Role bude mít přiřazeno jedno nebo více oprávnění (user_write, user_modify, report_read) atd.
  3. Oprávnění pro uživatele bude zděděno z role, ve které je
  4. Uživateli lze přiřadit ruční oprávnění kromě oprávnění zděděných z role.

K tomu jsem přišel s následujícím návrhem databáze.

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 |
+---------------+

To mi dává větší kontrolu nad ACL. Mohu povolit superadminům, aby sami přidělovali oprávnění a tak dále. Jak jsem řekl, je to jen pro představu.



  1. Jak funguje SQLite Ltrim()

  2. mysql seskupení podle týdne

  3. Upozornění:mysql_connect():[2002] Žádný takový soubor nebo adresář (pokouším se připojit přes unix:///tmp/mysql.sock) v

  4. Jak získat to nejlepší z protokolů PostgreSQL