Классика баз данных - статьи



         

Деревянный интерфейс - часть 6


Сама таблица, в общем виде, состоит из трех полей Id_Right – уникальный идентификатор права, Parent – ссылка на родительское право и Name – наименование права. В этом случае раздел дерева Право для получение корневых элементов дерева прав будет иметь SQL запрос такого вида:

select 7 as IdType, ‘Id_Right’ as IdName, Id_Right as IdValue, Name as Name, ‘Right’ as Icon from Right.Right where Parent is null

В этом SQL запросе в качестве дочерних элементов выбираются корневой список прав у которых Parent is null. Далее элемент Право должен иметь запрос такого вида:

select 7 as IdType, ‘Id_Right’ as IdName, Id_Right as IdValue, Name as Name, ‘Right’ as Icon from Right.Right where Parent = [current]

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

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

Например, при отображении прав можно сделать SQL запрос такого вида:

select 7 as IdType, ‘Id_Right’ as IdName, Id_Right as IdValue, Name as Name, ‘Right’ as Icon from Right.Right where Parent = [current]

union all

select 8 as IdType ‘ListRight’ as IdName, null as IdValue, ‘Обладатели права’ as Name, ‘ListRight’ as Icon from Dual

В этом случае элемент Обладатели права будет всегда отображен после списка прав этого уровня. Развернув этот элемент, получим список пользователей обладающих этим правом. Если немного усложнить вторую часть запроса добавив условие, можно добиться того, что элемент Обладатели права будет появляться только в тех местах, где указанным правом обладает хотя бы один пользователь:

select 8 as IdType ‘ListRight’ as IdName, null as IdValue, ‘Обладатели права’ as Name, ‘ListRight’ as Icon from Dual where 1 in (select 1 from Main.RightList where Id_Right = [IdRight])




Содержание  Назад  Вперед