Имя: Пароль:
1C
 
Поясните как RLS справляется с датой запрета редактирования
,
0 Гений 1С
 
гуру
24.03.06
16:32
Пусть в переменной ДокументСсылка у меня лежит документ "Приходная накладная" от 01.01.2004 года, я пишу:
Об=Документ.ПолучитьОбъект();
Об.Дата='20050101'; //01.01.2005
Об.Записать();

Дата запрета редактирования 01.07.2004 года.

Как RLS сможет проконтролировать, что документ изменять нельзя, ведь хотя новая дата и разрешена к редактированию, старая версия объекта лежит за пределеами.

И есть ли разница с тем, что пользователь так же перенесет документ из закрытого периода в новый, поменяв дату.

Смутные сомнения меня терзают, можно ли такое сделать?
1 ТелепатБот
 
гуру
24.03.06
16:32
2 tsr
 
24.03.06
16:43
А ты не пробовал открыть документ в типовой и посмотреть, как там это реализованно? Если нет, даю наводку. В RLS условие ставиться на изменение документа, добавление, удаление и просмотр. Значит изменить ранее записанный документ не даст
3 Квери Аналайзер
 
24.03.06
16:53
(0) Мда... все ж ты далеко не Гений 1С...
4 Гений 1С
 
гуру
24.03.06
16:55
а когда срабатывает RLS на изменение - при вызове ПолучитьОбъект или при вызове Записать? И RLS отрабатывает по старой версии или по новой версии?
5 Гений 1С
 
гуру
24.03.06
16:56
(2) В типовую лень лезть, интересует принцип
6 Гений 1С
 
гуру
24.03.06
16:57
(2) другая ситуация - у меня документ от 01.01.2005 года, а я его записываю на 01.01.2004. RLS сработает или нет?
7 Гений 1С
 
гуру
24.03.06
16:57
(3) А ты далеко не Квери Аналайзер, гыыгы
8 Гений 1С
 
гуру
24.03.06
17:36
(8) ну че, никто типовые не юзал что ли?
9 Vozhd
 
24.03.06
17:39
(6) А потратить 5-10 минут и проверить не судьба?
10 Гений 1С
 
гуру
24.03.06
17:41
(10) Здесь важен принцип - можно такое сделать или нет через RLS и сделали ли это в типовых. Ну если никого умного не найдется, кто УПП юзает, придется конечно самому лезть. Просто я "ненавижу" RLS и не люблю его юзать.
11 Vozhd
 
24.03.06
17:42
(10) Не любите - не "юзайте". Как будто Вас кто силой заставляет его использовать...
12 Гений 1С
 
гуру
24.03.06
17:46
(11) ну я и за проезд платить не люблю, гыгыыгы.. :)
13 Vozhd
 
24.03.06
17:52
(10) А как бы Вы организовали на уровне платформы ограничение на изменение данных?
14 Гений 1С
 
гуру
24.03.06
18:01
(13)
Почему на уровне платформы?
В процедуре ПередЗаписью():

Дата1=Объект.Ссылка.ПолучитьОбъект().Дата;
Дата2=Объект.Дата;
Если
   Дата1<>Неопределено и Дата1<=ДатаЗапретаРедактирования ИЛИ
   Дата2<>Неопределено и Дата2<=ДатаЗапретаРедактирования
Тогда
   Отказ=истина;
   Возврат;
КонецЕсли;


Неопределено - на случай нового документа. :)
15 Гений 1С
 
гуру
24.03.06
18:02
(13) сдается мне, что RLS не обрабатывает одну из этих ситуаций
16 Гений 1С
 
гуру
27.03.06
17:02
Не поленился, проверил, работает одинаково и для случая А и для случая Б.
Блин, никак не могу понять, получается что RLS на изменение срабатывает и с объектом в базе данных, а потом и с объектом, который записывается, т.е. дважды?
А вот скажем если бы я хотел разрешить одну из ситуаций, то кранты? То бишь я не смог бы различить объект из БД и объект записываемый.
Вот RLS на изменение, RLS на чтение пустой:

ВЫБРАТЬ
   ПоступлениеТоваровУслуг.Ссылка
ИЗ
   Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
       ПО ПоступлениеТоваровУслуг.Организация = ПраваДоступаПользователей.ОбъектДоступа
           И (ПраваДоступаПользователей.ОбластьДанных = &ОбластьДанныхБухгалтера)
           И (ПраваДоступаПользователей.Пользователь В (&ГруппыТекущегоПользователя))
           И (ПраваДоступаПользователей.Запись = ИСТИНА)
ГДЕ
   ВЫБОР
           КОГДА ПоступлениеТоваровУслуг.ОтражатьВБухгалтерскомУчете
                   И ПоступлениеТоваровУслуг.ОтражатьВУправленческомУчете
                   И ПоступлениеТоваровУслуг.Проведен
               ТОГДА (НЕ 1 В
                               (ВЫБРАТЬ РАЗЛИЧНЫЕ
                                   1
                               ИЗ
                                   РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных
                               ГДЕ
                                   ГраницыЗапретаИзмененияДанных.Организация = ПоступлениеТоваровУслуг.Организация
                                   И ГраницыЗапретаИзмененияДанных.Роль = &ОбластьДанныхБухгалтера
                                   И ПоступлениеТоваровУслуг.Дата < ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений))
                       И (НЕ 1 В
                               (ВЫБРАТЬ РАЗЛИЧНЫЕ
                                   1
                               ИЗ
                                   РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных
                               ГДЕ
                                   ГраницыЗапретаИзмененияДанных.Организация = &ПустаяОрганизация
                                   И ГраницыЗапретаИзмененияДанных.Роль = &ОбластьДанныхБухгалтера
                                   И ПоступлениеТоваровУслуг.Дата < ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений))
           КОГДА ПоступлениеТоваровУслуг.ОтражатьВБухгалтерскомУчете
                   И ПоступлениеТоваровУслуг.Проведен
               ТОГДА (НЕ 1 В
                           (ВЫБРАТЬ РАЗЛИЧНЫЕ
                               1
                           ИЗ
                               РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных
                           ГДЕ
                               ГраницыЗапретаИзмененияДанных.Организация = ПоступлениеТоваровУслуг.Организация
                               И ГраницыЗапретаИзмененияДанных.Роль = &ОбластьДанныхБухгалтера
                               И ПоступлениеТоваровУслуг.Дата < ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений))
           КОГДА ПоступлениеТоваровУслуг.ОтражатьВУправленческомУчете
                   И ПоступлениеТоваровУслуг.Проведен
               ТОГДА (НЕ 1 В
                           (ВЫБРАТЬ РАЗЛИЧНЫЕ
                               1
                           ИЗ
                               РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных
                           ГДЕ
                               ГраницыЗапретаИзмененияДанных.Организация = &ПустаяОрганизация
                               И ГраницыЗапретаИзмененияДанных.Роль = &ОбластьДанныхБухгалтера
                               И ПоступлениеТоваровУслуг.Дата < ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений))
           ИНАЧЕ ИСТИНА
       КОНЕЦ
17 Vozhd
 
27.03.06
17:50
(16) Да, RLS на изменение срабатывает два раза.
18 Гений 1С
 
гуру
27.03.06
17:53
(17) то бишь получается, разрешить переносить пользователю документы я не смогу сделать (чисто теоретически) :)
19 Гений 1С
 
гуру
27.03.06
17:53
(17) т.е. в RLS я не могу отличить хранимый объект от его новой версии, так?
20 Vozhd
 
27.03.06
17:55
(19) Отличить версии друг от друга нельзя.
(18) Разрешить переносить можно. Но для этого придется делать отдельную процедуру в привилегированном модуле.
21 Гений 1С
 
гуру
27.03.06
18:10
(20) гыгыгы... Мораль: в модуле я могу сделать более широкую проверку на права доступа, чем в RLS. :)
22 Конь в пальто
 
27.03.06
18:11
(21) мораль: если у человека понос мысли, ему ничего не поможет!)
23 Гений 1С
 
гуру
27.03.06
18:17
(22) мораль - если чего-то не любишь, нужно искать все его недостатки, гыгыгы...
24 Гений 1С
 
гуру
27.03.06
18:18
Ну я не буду напоминать, что в RLS нельзя определить ситуацию, например, когда сбрасывается/устанавливается флажок (реквизит объекта), поэтому для себя я давно решил - лучше использовать проверку на запись в модуле, чем RLS
25 Гений 1С
 
гуру
27.03.06
18:18
(22) вот ты конь в пальто, любишь RLS?
26 mikecool
 
27.03.06
18:19
а что такое RLS?
27 Конь в пальто
 
27.03.06
18:20
(25) я равнодушен к RLS
28 Vozhd
 
27.03.06
18:22
(21) Так вроде никто и не обещал безграничных возможностей. Надо лишь искать варианты наиболее полно использовать то, что есть и не особо углубляться в извраты.
29 Гений 1С
 
гуру
27.03.06
18:31
(28) гыгыгы. Не пойму, чем RLS на измение лучше кода на языке 1С?
Ну не считая того, что он выполняется на сервере (разница между клиентом и сервером 1%), то где выгода?
Может быть в RLS на изменение нужно было позволить писать сразу код на языке 1С, как вариант и все было бы пучком. :)
Вот RLS на чтение другое дело - там обрабатывается массив записей, а не одна запись.
30 PR
 
27.03.06
19:03
(21) Есть ситуации, когда только RLS может красиво решить проблему
31 Vozhd
 
27.03.06
20:02
(29) Как без RLS-а реализовать ограничение доступа к данным, чтобы подключаемые обработки не могли прочитать секретные данные?
34 Гений 1С
 
гуру
28.03.06
12:40
(31)
гыгыгы... подключать обработки только администратором. :)
К тому же в (31) речь идет об RLS на чтение, а не на изменение
RLS на чтение имеет место жить по причине быстродействия.
(30) например?
(31) кстати в движке форума PHPBB и мисты RLS не используются (имеется ввиду ограничение на конкретные таблицы, есть только ограничение на функции, которые может запускать пользователь). И ничего, секретные данные не теряются. :)
35 Гений 1С
 
гуру
28.03.06
12:43
(31) интересно, как бы выживали интернет-порталы, если бы любой юзер мог бы прийти туда со своей внешней обработкой, запустить ее и делать что хошь?