У меня есть следующие таблицы:
users
- userid
- real name
- other stuff
roles
- roleid
- description
- other stuff
functions
- functionid
- description
screens
- screenid
- description
Пользователь может иметь несколько ролей в соответствии с таблицей
user_roles
- userid
- roleid
Каждая роль может иметь редактирование, просмотр или отсутствие доступа к заданной функции, управляемой таблицей
role_functions
- roleid
- functionid
- status
status
- это «E», если у роли есть разрешение на редактирование этой функции, «V», если у роли есть разрешение на просмотр для этой функции, и не может быть ни записи, либо записи со статусом «N», если роль не имеет разрешения для этой функции.
И, наконец, функция имеет несколько экранов, как указано в таблице
function_screens
- functionid
- screenid
Я знаю, что это довольно запутанный беспорядок, но требования к ролям, функциям и экранам исходят от разных подразделений, поэтому я не могу упростить его. Тем не менее, мне нужен запрос, который я могу направить в отдел контроля качества и другим лицам, которым присвоен идентификатор пользователя, они могут перечислить все экраны, а также определить, есть ли у них доступ к этому экрану: «Правка», «Просмотр» или «Нет». Если этот пользователь принадлежит к одной роли, которая дает ему разрешение «E» для функции, которая включает экран, и другой роли, которая дает ему разрешение «V» для функции, которая включает в себя тот же экран, тогда его разрешение на этот экран равно «E». .
Прямо сейчас я выполняю все эти поиски, используя набор Java-кода с Maps of Maps, но мне интересно, есть ли более простой способ сделать это в сценарии SQL.