Простая структура базы данных разрешений пользователей - PullRequest
1 голос
/ 18 марта 2019

Я ищу правильное решение для структуры базы данных с учетом прав пользователей.

Таблица:

  • users
  • companies (соответствующие столбцы: id)
  • projects (соответствующие столбцы: id, company_id)
  • jobs (соответствующие столбцы: id, company_id, project_id)

Сценарии, которые я хочу выполнить, - назначить определенного пользователя и / или пользователей на:

  • все проекты внутри компании («Синди назначена на все проекты и все рабочие места в компании»)
  • выбор проектов внутри компании («Синди назначена на три из пяти проектов и назначена на все рабочие места в этих трех проектах»)
  • выбранные работы в рамках проекта (ов) («Синди назначена на пять из десяти работ в рамках одного проекта и две работы в другом проекте»)

Я думаю об отдельной таблице permissions, в которую я просто вставляю разрешения для соответствующих заданий и использую соответствующие столбцы из таблицы jobs для каскадирования разрешений вверх. Другими словами - если у пользователя есть разрешение на конкретную работу, он также имеет разрешение для родительского проекта и головной компании.

SQL Fiddle: http://sqlfiddle.com/#!9/74a4d3/2

1 Ответ

0 голосов
/ 18 марта 2019

Вот предлагаемая структура таблицы для permissions:

USER_ID     OBJ_TYPE      OBJ_ID     PERMISSION
JDOE        COMPANY       1          1-READONLY
JDOE        COMPANY       2          2-READWRITE
JDOE        PROJECT       1          2-READWRITE

Тогда код для проверки доступа пользователя может выглядеть примерно так:

SELECT MAX(permission) FROM permissions 
 WHERE user_id = :USERID
   AND (  (obj_type = 'JOB' and obj_id = :JOBID)
       OR (obj_type = 'PROJECT' and obj_id = :PROJECTID)
       OR (obj_type = 'COMPANY' and obj_id = :COMPANYID)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...