Наложить в PROTECT-е фильтр на таблицу
Модераторы: m0p3e, edward_K, Модераторы
Наложить в PROTECT-е фильтр на таблицу
Есть задача запретить пользователю редактировать чужие записи в таблице. Только со своим дескриптором.
Вопрос: как динамически подцепить в условиях фильтра на таблицу дескриптор текущего пользователя? (чтобы сравнить его с дескриптором записи, которую этот пользователь намеревается редактировать)
Вопрос: как динамически подцепить в условиях фильтра на таблицу дескриптор текущего пользователя? (чтобы сравнить его с дескриптором записи, которую этот пользователь намеревается редактировать)
-
- Местный житель
- Сообщения: 291
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: С-Петербург
- Контактная информация:
Есть вариант через настройки, правда, он криво работает.
Настройки - > Общие настройки системы -> Доступ к документам.
Там есть варианты - только со своим дескриптором, в рамках группы и прочее.
Попробуй его. Правда еще раз говорю, работает не на ура
Настройки - > Общие настройки системы -> Доступ к документам.
Там есть варианты - только со своим дескриптором, в рамках группы и прочее.
Попробуй его. Правда еще раз говорю, работает не на ура
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
Так будет правильно или нет?
1. Группа "ВСЕ" - Права на таблицы - FPOBOROT - убираем все права
2. Группа "ВСЕ" - Права по условиям - Условие "ОткрытоВсеКромеКнигиПлановыхОпераций" - FPOBOROT - RUID
Настройка условия:
CPLANSSCH <> 150 (ссылка на регистр учета "План")
3. Пользователь XXX - Права по условиям - Условие "РедактируемТолькоСвоиЗаписиКнигиПланОпераций" - FPOBOROT --U-
Настройка условия:
ATL_LASTUSER = (код пользователя)
1. Группа "ВСЕ" - Права на таблицы - FPOBOROT - убираем все права
2. Группа "ВСЕ" - Права по условиям - Условие "ОткрытоВсеКромеКнигиПлановыхОпераций" - FPOBOROT - RUID
Настройка условия:
CPLANSSCH <> 150 (ссылка на регистр учета "План")
3. Пользователь XXX - Права по условиям - Условие "РедактируемТолькоСвоиЗаписиКнигиПланОпераций" - FPOBOROT --U-
Настройка условия:
ATL_LASTUSER = (код пользователя)
не уверен насчет tuneslib.dll, но вот G_Tune.dll в SUP_EXE скопировать точно надо
а перед построением фильтра с использованием функции sGetTune нужно комилятором интерфейсов компильнуть строку:
function sGetTune (string) : string; external 'G_Tune.dll';
после этого вернуться в PROTECT, создать фильтр и пересчитать права пользователям
а перед построением фильтра с использованием функции sGetTune нужно комилятором интерфейсов компильнуть строку:
function sGetTune (string) : string; external 'G_Tune.dll';
после этого вернуться в PROTECT, создать фильтр и пересчитать права пользователям
а вот на ту же тему еще, пожалуйста, помогите разобраться. Задача стоит та же - запретить пользователю редактировать чужие записи в таблице например DOCINFO - примечания к документам. Читать - все, редактировать - только свои. Создаю два фильтар для записей -
1) фильтр для чтения всего - "ЧитаемВСЕ" - NREC<>0 Права R---
2) фильтр для моджификации своих - "МеняемТолькоСвои" - ATL_LASTUSER=4612064042742671604 Права -IUD
Наложенные по отдельности (по-одному) - фильтры работают так как и ожидалось - по их названию и сути, но будучи примененными одновременно - дают этому самому пользователю любые права н а все записи.
Как тут права суммируются? Объясните мне пожалуйста!
1) фильтр для чтения всего - "ЧитаемВСЕ" - NREC<>0 Права R---
2) фильтр для моджификации своих - "МеняемТолькоСвои" - ATL_LASTUSER=4612064042742671604 Права -IUD
Наложенные по отдельности (по-одному) - фильтры работают так как и ожидалось - по их названию и сути, но будучи примененными одновременно - дают этому самому пользователю любые права н а все записи.
Как тут права суммируются? Объясните мне пожалуйста!
Попробуйте так:
- ограничение только на чтение R--- нужно задать не через фильтр, а в закладке Права на таблицы для группы пользователей ВСЕ.
- фильтр МеняемТолькоСвои прицеплять конкретным пользователям.
Вообще как мне кажется удобнее использовать не ATL_LASTUSER=(код пользователя), а динамическую конструкцию типа TABLE.DESCR = sGetTune('USER.DESCR'),
где TABLE - название нужной таблицы.
Применимо разумеется для тех таблиц, которые содержат поле DESCR.
Единственное неудобство здесь в том, что перед каждым пересчетом прав на базу нужно компилять строку:
function sGetTune (string) : string; external 'G_Tune.dll';
(см. посты выше)
Зато не надо вручную прописывать для каждого пользователя его код.
Тема этой ветки собственно и была такая - как "отловить" редактирующего пользователя именно динамически.
- ограничение только на чтение R--- нужно задать не через фильтр, а в закладке Права на таблицы для группы пользователей ВСЕ.
- фильтр МеняемТолькоСвои прицеплять конкретным пользователям.
Вообще как мне кажется удобнее использовать не ATL_LASTUSER=(код пользователя), а динамическую конструкцию типа TABLE.DESCR = sGetTune('USER.DESCR'),
где TABLE - название нужной таблицы.
Применимо разумеется для тех таблиц, которые содержат поле DESCR.
Единственное неудобство здесь в том, что перед каждым пересчетом прав на базу нужно компилять строку:
function sGetTune (string) : string; external 'G_Tune.dll';
(см. посты выше)
Зато не надо вручную прописывать для каждого пользователя его код.
Тема этой ветки собственно и была такая - как "отловить" редактирующего пользователя именно динамически.