Динамический фильтр в представлении
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
nOnAME Участник со стажем
Вступление в Клуб: 25.01.2011
|
Вт Май 31, 2011 08:47  Динамический фильтр в представлении |
|
Полезность: Нет оценки
|
Доброго времени суток.
Допустим есть задача открывать одно и тоже представление для разных пользователей по разному, в зависимости от уровня доступа. Представление написано на PL Plus. Обычный where не устраивает, т.к. проверка на админа идет по имени, а выборка должна идти по подразделениям. Т.е. для обычного пользователя берется его подразделение и выводятся данные только по его подразделению, а вот для админа хочется чтобы выводились данные по всем подразделениям. Соответстаенно при where надо делать либо внутренний select, либо создавать массив.
В примерах дестрибутивных представлений нашел такую вещь как pragma, которая позволяет в зависимость от условий "pragma IF_DEF" осуществлять ту или иную выборку. Вот собственно проблема в следующем:
1. Объявляю переменную (pragma Define(переменная));
2. Это объявление привязываю к условию по имени пользователя в процедуре.
3. В Pl-Plus представлении пишу pragma include(имя процедуры).
4. В этом же представлении пишу pragma IF_DEF(переменная) и дальше один код для select
5. Еще один pragma If_Def и второй код для select (когда переменная не была объявлена).
В результате получаю что переменная объявлена всегда и запрос выполняется один и тот же.
Собственно, если кто может помочь в этом деле милости просим. |
|
 |
ggrey Участник со стажем
Вступление в Клуб: 01.10.2007
|
Вт Май 31, 2011 09:19   |
|
Полезность: 1
|
1. pragma DEFINE, IF_DEF и т.д. работают на этапе компиляции, т.е. вам не подходят.
2. Из вашего описания мне кажется что можно написать следующий where:
where (ИМЯ_ПОЛЬЗОВАТЕЛЯ <> АДМИН and ПОДРАЗДЕЛЕНИЕ_ПОЛЬЗОВАТЕЛЯ = ПОДРАЗДЕЛЕНИЕ) or ИМЯ_ПОЛЬЗОВАТЕЛЯ = АДМИН |
|
 |
r00st Эксперт
Вступление в Клуб: 14.09.2007
|
Вт Май 31, 2011 09:25   |
|
Полезность: Нет оценки
|
Доступ по реквизиту (если применимо). |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Май 31, 2011 10:17   |
|
Полезность: Нет оценки
|
Вот чего я не пойму, так это почему нельзя выбрать данные по stdlib.userid? Там и доступ можно ограничить в том же Where по филиалу(подразделению) и админа исключить. _________________ всегда есть как минимум 2 выхода |
|
 |
nOnAME Участник со стажем
Вступление в Клуб: 25.01.2011
|
Вт Май 31, 2011 10:29   |
|
Полезность: Нет оценки
|
Всем спасибо, просто думал как то через прагму сделать, но раз нельзя, значит будет where  |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|