Страница 1 из 2

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

Добавлено: 21 ноя 2005, 10:34
sim
Есть задача запретить пользователю редактировать чужие записи в таблице. Только со своим дескриптором.
Вопрос: как динамически подцепить в условиях фильтра на таблицу дескриптор текущего пользователя? (чтобы сравнить его с дескриптором записи, которую этот пользователь намеревается редактировать)

Добавлено: 21 ноя 2005, 10:55
Johny
Есть вариант через настройки, правда, он криво работает.
Настройки - > Общие настройки системы -> Доступ к документам.

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

Попробуй его. Правда еще раз говорю, работает не на ура

Добавлено: 21 ноя 2005, 11:19
sim
да не, этот вариант не катит
не распространяются настройки доступа к документам на эту таблицу
вернее, на этот тип документа (книга плановых финопераций)
только через протект можно пробовать закрыть фильтрами

Добавлено: 21 ноя 2005, 13:00
maikl
В протекте поставить фильтр, только на свой дескриптор, либо на nrec

Добавлено: 21 ноя 2005, 13:09
sim
1. как нарисовать фильтр на свой дескриптор, не перечисляя в строчках фильтра все необходимые дескрипторы (их много), а именно динамически, т.е. чтобы "подхватывался" дескриптор текущего пользователя?
2. фильтр на nrec - это как?

Добавлено: 21 ноя 2005, 13:45
san
в настройке группы записей в колонке значение можно использовать ф-ции, которые будут вычисляться для запроса

Добавлено: 21 ноя 2005, 13:54
maikl
1. Мы ставим фильтр на группу дескрипторов
или
2. ATL_LASTUSER= ................. --U-
.т.е редактируются только карточки созданные этим пользователем

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

Добавлено: 22 ноя 2005, 05:52
san
не забудте что протект проверяет пост-условие. например защищаем документы с датой меньше заданной, условие на дату документа.правим дату так что бы была больше заданной, правим документ,возвращаем дату.

Добавлено: 22 ноя 2005, 10:08
maikl
Не понятно, при чем тут дата документа?

Добавлено: 25 ноя 2005, 19:31
sim
Проблема решается через задание функции в поле значения:
FPOBOROT.DESCR = sGetTune('USER.DESCR')
правда при этом понадобятся шаманские действия, чтобы support распознал функцию

Добавлено: 28 ноя 2005, 13:40
san
точно надо tuneslib.dll из галактики надо в сапорт скопировать

Добавлено: 28 ноя 2005, 21:55
sim
не уверен насчет tuneslib.dll, но вот G_Tune.dll в SUP_EXE скопировать точно надо
а перед построением фильтра с использованием функции sGetTune нужно комилятором интерфейсов компильнуть строку:
function sGetTune (string) : string; external 'G_Tune.dll';
после этого вернуться в PROTECT, создать фильтр и пересчитать права пользователям

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

Наложенные по отдельности (по-одному) - фильтры работают так как и ожидалось - по их названию и сути, но будучи примененными одновременно - дают этому самому пользователю любые права н а все записи.
Как тут права суммируются? Объясните мне пожалуйста!

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