Схема базы данных MySQL для управления доступом пользователей и групп

Я пытаюсь найти решение этой проблемы в течение нескольких дней, и я просто не могу придумать что-то, что работает. Проблема заключается в следующем:

в настоящее время я разрабатываю инструмент статистики, который показывает некоторые графики и данные для нескольких приложений. Доступ к этим данным, очевидно, должен быть ограничен, поскольку пользователь A владеет приложениями "один" и "два" и не должен видеть "три"или " четыре".

теперь каждый пользователь может быть членом нескольких группы и наследовать разрешения от этой группы, но также могут иметь индивидуальные разрешения. Эти разрешения должны быть установлены для каждого приложения. Доступ к набору данных одного приложения предоставляется, если:

  • сам пользователь имеет разрешение на доступ к этой части данных этого приложения
  • любой из групп пользователь является членом имеет разрешения на доступ к этой части данных этого приложения

http://i.stack.imgur.com/y4W6E.png

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

Я не знаю, помогает ли это найти решение, но вот SQL, чтобы получить текущие активные разрешения пользователя с id 1:

(
SELECT u.perm_id AS perm, u.user_id AS uid, u.app_id AS app
FROM daUsers_has_daPermissions AS u
WHERE u.user_id = 1
)
UNION
(
SELECT g.perm_id AS perm, u.user_id AS uid, g.app_id AS app
FROM daUsers_has_daPermissions AS u, daUsergroup_has_daPermissions AS g, daUsergroup_has_daUsers AS g_has_u
WHERE u.user_id = 1
AND u.user_id = g_has_u.user_id
AND g.group_id = g_has_u.group_id
);

Это то, что я хочу сохранить в дополнительной таблице (только для всех пользователи.)

1 ответов


звучит для меня, вы должны использовать вид. У вас уже есть запрос, используйте запрос для создания представления.