Адресация нескольких условий доступа к меню? - PullRequest
0 голосов
/ 12 июля 2010

Я нахожусь в процессе реализации разрешений в настройке навигации многоуровневого меню с вкладками / выпадающими меню.Есть ли лучший способ реализации разрешений по сравнению с переносом каждого пункта меню в оператор if?

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

Home
Admin -----> Users
             Notices
             Setup
Projects --> Active Projects
             Inactive Projects
             Updates
Reports
Preferences
Research --> Open Tickets
             Closed Tickets
             Unassigned

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

1 Ответ

0 голосов
/ 12 июля 2010

У меня не было бы столбца на элемент меню, но строки на элемент меню в таблице примерно так:

create table menu_access 
   (userid varchar2(30),
    menuid integer, 
    access_flag integer,
    primary key (username, menuid)
   );

Тогда вы вставите данные как:

insert into menu_access (username, menuid, access_flag) values ('TONY', 123, 1);
insert into menu_access (username, menuid, access_flag) values ('TONY', 456, 1);
insert into menu_access (username, menuid, access_flag) values ('TONY', 789, 0);

(Альтернативой может быть полное исключение столбца access_flag и просто сохранение строк для пунктов меню, к которым у пользователя есть доступ).

Таким образом, условия для отображения каждого пункта меню будут одинаковыми, просто привязка другого значения для menuid. Вы также можете, возможно, создать меню, выбрав все строки, к которым у пользователя есть доступ, и соответствующим образом составив меню.

...