Имя: Пароль:
1C
1С v8
Ограничение прав с помощью RLS, стоит игра свеч?
0 1234567
 
23.10.12
16:57
Привет, 1с-ники.

Проектирую возможность реализовать гибкие настройки прав доступа для пользователей 1с8,1. RLS то что надо, все подходит, уже есть тестовые примеры.

Ограничения по:
Организация
Подразделение
Департамент
Ответственный

и каждый имеет такие настройки:
Все записи
Только по указанным (Организация, подразделение ...)
Все кроме указанных (Организация, подразделение ...)
Только свои документы

В одном запросе на чтение документа может быть около 3-4 хитрых условий вывода.

Так вот. Вопрос в том, стоит ли это все реализовать с помощью RLS?, или снижение производительности доконает потом сделать на костилях с помощью отборов и т.д.
1 IronDemon
 
23.10.12
17:01
А есть другие варианты?
2 1234567
 
23.10.12
17:03
Ну есть, с помощью отборов. Но безопаснее с помощью RLS, так как вдруг пользователь как-то умудрится отключить отбор и тогда увидит то что не должен видеть.
3 IronDemon
 
23.10.12
17:05
Отбор и в отчеты пихать будешь?
Или запросы здоровенные ваять будешь?
4 Shurjk
 
23.10.12
17:05
(2) Правильно мыслишь.
5 IronDemon
 
23.10.12
17:05
Не изобретай велосипед :)
6 1234567
 
23.10.12
17:07
Я могу все впихнуть в RLS, а могу только основное и дальше с помощью отборов.
С помощью RLS меня смущает замедление производительности, так как нужно много написать и сделать, и что потом в просак не попасть...

Да на счет отчетов - только RLS.
7 Spieluhr
 
23.10.12
17:07
(0) RLS - нормально, но ОБЯЗАТЕЛЬНО нужно свести к минимуму количество ролей, назначаемых пользователям
8 1234567
 
23.10.12
17:10
Боюсь что напишу сложные условия (так как универсальность заставляет) в RLS и потом все будет ползать при работе в 1с.
9 pumbaEO
 
23.10.12
17:11
(6) а с отборами у тебя не будет замедления ?

(8) слушай (5)
10 Fragster
 
гуру
23.10.12
17:11
если 4-3 "хитрых" усолвия тормозят - денормализуй в 1 "нехитрое"
11 Miss1C
 
23.10.12
17:13
(0)Игралась с РЛС поняла что сильно замедляет систему, список документов открывается 5 секунд, решила это дело обычным отбором с дальнейшим запретом менять отборы. Теперь тот самый список из 200к документов открывается за секунду
12 Fragster
 
гуру
23.10.12
17:15
(11) не повезло
13 Miss1C
 
23.10.12
17:15
(11)Почему))
14 pumbaEO
 
23.10.12
17:16
(8) на тебе заготовку.

Функция ДоступКОтчету(Пользователь, ИмяОтчета, ОбъектОтчета) Экспорт
   Если НЕ ЗначениеЗаполнено(Пользователь) Тогда
       Сообщить("Неверная авторизация!");
       Возврат Ложь;
   КонецЕсли;    
   Если ПустаяСтрока(ИмяОтчета) Тогда
       Сообщить("Неверный идентификатор отчета");
       Возврат Ложь;
   КонецЕсли;
   
   Если ИмяОтчета = "Продажи" Тогда
       //Объект - универсальныйотчет

       ЗапрФилиалы = Новый Запрос;
       ЗапрФилиалы.Текст =
       "ВЫБРАТЬ
       |    ДоступКОтчетам.Филиалы
       |ИЗ
       |    РегистрСведений.ДоступКОтчетам КАК ДоступКОтчетам
       |ГДЕ
       |    ДоступКОтчетам.Пользователь = &Пользователь
       |    И ДоступКОтчетам.ИмяОтчета = &ИмяОтчета
       |    И ДоступКОтчетам.Доступен = ИСТИНА";
       ЗапрФилиалы.УстановитьПараметр("Пользователь", Пользователь);
       ЗапрФилиалы.УстановитьПараметр("ИмяОтчета", "Продажи");
       ТабФилиалов = ЗапрФилиалы.Выполнить().Выгрузить();
       МассивФилиалов = ТабФилиалов.ВыгрузитьКолонку("Филиалы");
       
       ЗапросВсеФилиалы = Новый Запрос;
       ЗапросВсеФилиалы.Текст =
       "ВЫБРАТЬ
       |    Филиалы.Ссылка
       |ИЗ
       |    Справочник.Филиалы КАК Филиалы
       |ГДЕ
       |    Филиалы.ПометкаУдаления = ЛОЖЬ
       |    И Филиалы.ЭтоГруппа = ЛОЖЬ";
       ТабВсеФилиалы = ЗапросВсеФилиалы.Выполнить().Выгрузить();
       МассивВсеФилиалы = ТабВсеФилиалы.ВыгрузитьКолонку("Ссылка");
       ЕстьНедоступныеФилиалы = Ложь;
       Для Каждого ТекФилиал Из МассивВсеФилиалы Цикл
           Если МассивФилиалов.Найти(ТекФилиал) = Неопределено Тогда
               ЕстьНедоступныеФилиалы = Истина;
               Прервать;
           КонецЕсли;    
       КонецЦикла;    
       
       //Добавлено: Сосна Евгений <[email protected]> 04.08.2012

       // [[https://bitbucket.org/.../1|Issue #1]]

       // филиалов нет, разделение доступа по филиалам не используется.

       // автоматом ДокументПродажи.Ответственный не добавляется . Данный фильтр не имеет смысла.

       // Я только исправляю.

       //

       // Автору:

       // Что бы тебе с ц уко икнулось - ВСЕ НАДО ДЕЛАТЬ НА РЛС

       //

       ЕстьНедоступныеФилиалы = Ложь;
       
       /// Сосна Евгений <[email protected]> 04.08.2012

       Если ЕстьНедоступныеФилиалы Тогда
           СписокФилиалов = Новый СписокЗначений;
           СписокФилиалов.Очистить();
           
           ОтборВОтчете = ОбъектОтчета.УниверсальныйОтчет.ПостроительОтчета.Отбор;
           ЭлементОтбора = ОтборВОтчете.Найти("ДокументПродажиОтветственныйОтделение");
           //ЭлементОтбора = ОтборВОтчете.Найти("ДокументПродажиСклад");

           Если ЭлементОтбора = Неопределено Тогда
               ЭлементОтбора = ОтборВОтчете.Добавить("ДокументПродажи.Ответственный.Отделение");
               //ЭлементОтбора = ОтборВОтчете.Добавить("Документ продажи.Склад");

               для Каждого ТекФилиал из МассивФилиалов Цикл
                   СписокФилиалов.Добавить(ТекФилиал);
               КонецЦикла;    
           Иначе
               //СписокВОтборе = ОтборВОтчете["ДокументПродажиСклад"].Значение;

               СписокВОтборе = ОтборВОтчете["ДокументПродажиОтветственныйОтделение"].Значение;
               Если ТипЗнч(СписокВОтборе) = Тип("СписокЗначений") Тогда
                   Для Каждого ТекЗначение из СписокВОтборе Цикл
                       Если НЕ МассивФилиалов.Найти(ТекЗначение.Значение)=Неопределено Тогда
                           СписокФилиалов.Добавить(ТекЗначение.Значение);
                       КонецЕсли;    
                   КонецЦикла;    
               КонецЕсли;
           КонецЕсли;
           Если СписокФилиалов.количество() = 0 Тогда
               для Каждого ТекФилиал из МассивФилиалов Цикл
                   СписокФилиалов.Добавить(ТекФилиал);
               КонецЦикла;    
           КонецЕсли;
           //ЭлементОтбора.доступность = ложь;

           ОтборВОтчете["ДокументПродажиОтветственныйОтделение"].Использование = Истина;
           ОтборВОтчете["ДокументПродажиОтветственныйОтделение"].Видсравнения = ВидСравнения.ВСписке;
           ОтборВОтчете["ДокументПродажиОтветственныйОтделение"].Значение = СписокФилиалов;
           //ОтборВОтчете["ДокументПродажиСклад"].Использование = Истина;

           //ОтборВОтчете["ДокументПродажиСклад"].Видсравнения = ВидСравнения.ВСписке;

           //ОтборВОтчете["ДокументПродажиСклад"].Значение = СписокСкладов;

       КонецЕсли;
       Если НЕ (Пользователь.ПолныйДоступКБалансам или Пользователь.ICQАдминистратор) Тогда
           ОтборВОтчете = ОбъектОтчета.УниверсальныйОтчет.ПостроительОтчета.Отбор;
           ЭлементОтбора = ОтборВОтчете.Найти("КонтрагентМенеджерыПокупателяМенеджерПокупателя");
           //ЭлементОтбора = ОтборВОтчете.Найти("ДокументПродажиСклад");

           Если ЭлементОтбора = Неопределено Тогда
               ЭлементОтбора = ОтборВОтчете.Добавить("Контрагент.МенеджерыПокупателя.МенеджерПокупателя");
           КонецЕсли;
           
           //ЭлементОтбора.доступность = ложь;

           ОтборВОтчете["КонтрагентМенеджерыПокупателяМенеджерПокупателя"].Использование = Истина;
           ОтборВОтчете["КонтрагентМенеджерыПокупателяМенеджерПокупателя"].Видсравнения = ВидСравнения.Равно;
           ОтборВОтчете["КонтрагентМенеджерыПокупателяМенеджерПокупателя"].Значение = Пользователь;    
       КонецЕсли;                    
       
   КонецЕсли;    


недавно встретил конфигурацию, в которой отрицание РЛС зашло в полную очистку типового РЛС и все пользователи сидели под полными правами...

Дерзай и тебя вспомнит кто нибудь, когда-нибудь вспомнит добрым словом(даш и другим заработать). :)
15 Fragster
 
гуру
23.10.12
17:18
(14) у меня счас ВСЕ так. не только ограничение доступа к данным, а вообще все. черезжопу. почти все время занимаюсь тем, что не дать развалиться из-за увеличения объемов, время по нормальному сделать почти не остается.
16 prog01
 
23.10.12
17:24
(14)какое феерическое какашище!
(0)прокатит всё, но лучше делать уникальную роль + интерфейс на каждое рабочее место (или группу дибилов) и там уже использовать ограничения, если ограничение не впихивается или становится необозримо большим в условие ограничения значит нужно сделать опорные данные в виде регистра сведний и припендюрить его в ограничении
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан