Mysql
 sql >> база данни >  >> RDS >> Mysql

Съхранение на разрешения за приложение в база данни

Бих го направил по този начин.

table name: permission
columns: id, permission_name

и след това мога да задам множество разрешения на потребителя, като използвам таблица за релации много към много

table name: user_permission
columns: permission_id, user_id

Този дизайн ще ми позволи да добавям толкова разрешения, колкото искам, и да го присвоя на толкова потребители, колкото искам.

Докато горният дизайн отговаря на вашите изисквания, аз имам свой собствен метод за внедряване на ACL в моето приложение. Публикувам го тук.

Моят метод за внедряване на ACL е така:

  1. На потребителя ще бъде назначена роля (администратор, гост, персонал, обществен)
  2. За една роля ще има присвоени едно или много разрешения (user_write, user_modify, report_read) и т.н.
  3. Разрешението за потребителя ще бъде наследено от ролята, в която той/тя е
  4. На потребителя може да бъде присвоено ръчно разрешение, освен разрешението, наследено от ролята.

За да направя това, измислих следния дизайн на база данни.

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

Това ми дава повече контрол върху ACL. Мога да разреша на суперадминистраторите сами да задават разрешение и т.н. Както казах, това е само за да ви дам идеята.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Производителност на MySQL:множество таблици спрямо индекс на една таблица и дялове

  2. УНИКАЛНО ограничение, само когато поле съдържа конкретна стойност

  3. LOAD_FILE връща NULL

  4. IF синтактична грешка

  5. вмъкване на данни в mysql база данни с помощта на php