Наложить в PROTECT-е фильтр на таблицу

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Наложить в PROTECT-е фильтр на таблицу

Сообщение sim »

Есть задача запретить пользователю редактировать чужие записи в таблице. Только со своим дескриптором.
Вопрос: как динамически подцепить в условиях фильтра на таблицу дескриптор текущего пользователя? (чтобы сравнить его с дескриптором записи, которую этот пользователь намеревается редактировать)
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Сообщение Johny »

Есть вариант через настройки, правда, он криво работает.
Настройки - > Общие настройки системы -> Доступ к документам.

Там есть варианты - только со своим дескриптором, в рамках группы и прочее.

Попробуй его. Правда еще раз говорю, работает не на ура
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Сообщение sim »

да не, этот вариант не катит
не распространяются настройки доступа к документам на эту таблицу
вернее, на этот тип документа (книга плановых финопераций)
только через протект можно пробовать закрыть фильтрами
maikl
Местный житель
Сообщения: 1503
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь

Сообщение maikl »

В протекте поставить фильтр, только на свой дескриптор, либо на nrec
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Сообщение sim »

1. как нарисовать фильтр на свой дескриптор, не перечисляя в строчках фильтра все необходимые дескрипторы (их много), а именно динамически, т.е. чтобы "подхватывался" дескриптор текущего пользователя?
2. фильтр на nrec - это как?
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

в настройке группы записей в колонке значение можно использовать ф-ции, которые будут вычисляться для запроса
maikl
Местный житель
Сообщения: 1503
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь

Сообщение maikl »

1. Мы ставим фильтр на группу дескрипторов
или
2. ATL_LASTUSER= ................. --U-
.т.е редактируются только карточки созданные этим пользователем
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Сообщение sim »

Так будет правильно или нет?
1. Группа "ВСЕ" - Права на таблицы - FPOBOROT - убираем все права
2. Группа "ВСЕ" - Права по условиям - Условие "ОткрытоВсеКромеКнигиПлановыхОпераций" - FPOBOROT - RUID
Настройка условия:
CPLANSSCH <> 150 (ссылка на регистр учета "План")
3. Пользователь XXX - Права по условиям - Условие "РедактируемТолькоСвоиЗаписиКнигиПланОпераций" - FPOBOROT --U-
Настройка условия:
ATL_LASTUSER = (код пользователя)
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

не забудте что протект проверяет пост-условие. например защищаем документы с датой меньше заданной, условие на дату документа.правим дату так что бы была больше заданной, правим документ,возвращаем дату.
maikl
Местный житель
Сообщения: 1503
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь

Сообщение maikl »

Не понятно, при чем тут дата документа?
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Сообщение sim »

Проблема решается через задание функции в поле значения:
FPOBOROT.DESCR = sGetTune('USER.DESCR')
правда при этом понадобятся шаманские действия, чтобы support распознал функцию
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

точно надо tuneslib.dll из галактики надо в сапорт скопировать
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Сообщение sim »

не уверен насчет tuneslib.dll, но вот G_Tune.dll в SUP_EXE скопировать точно надо
а перед построением фильтра с использованием функции sGetTune нужно комилятором интерфейсов компильнуть строку:
function sGetTune (string) : string; external 'G_Tune.dll';
после этого вернуться в PROTECT, создать фильтр и пересчитать права пользователям
ov
Постоянный обитатель
Сообщения: 150
Зарегистрирован: 29 мар 2005, 17:49

Сообщение ov »

а вот на ту же тему еще, пожалуйста, помогите разобраться. Задача стоит та же - запретить пользователю редактировать чужие записи в таблице например DOCINFO - примечания к документам. Читать - все, редактировать - только свои. Создаю два фильтар для записей -
1) фильтр для чтения всего - "ЧитаемВСЕ" - NREC<>0 Права R---
2) фильтр для моджификации своих - "МеняемТолькоСвои" - ATL_LASTUSER=4612064042742671604 Права -IUD

Наложенные по отдельности (по-одному) - фильтры работают так как и ожидалось - по их названию и сути, но будучи примененными одновременно - дают этому самому пользователю любые права н а все записи.
Как тут права суммируются? Объясните мне пожалуйста!
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Сообщение sim »

Попробуйте так:
- ограничение только на чтение R--- нужно задать не через фильтр, а в закладке Права на таблицы для группы пользователей ВСЕ.
- фильтр МеняемТолькоСвои прицеплять конкретным пользователям.
Вообще как мне кажется удобнее использовать не ATL_LASTUSER=(код пользователя), а динамическую конструкцию типа TABLE.DESCR = sGetTune('USER.DESCR'),
где TABLE - название нужной таблицы.
Применимо разумеется для тех таблиц, которые содержат поле DESCR.
Единственное неудобство здесь в том, что перед каждым пересчетом прав на базу нужно компилять строку:
function sGetTune (string) : string; external 'G_Tune.dll';
(см. посты выше)
Зато не надо вручную прописывать для каждого пользователя его код.
Тема этой ветки собственно и была такая - как "отловить" редактирующего пользователя именно динамически.
Ответить