Как скрыть код на Querymodechange для пользователей

susinmn

Well-known member
16.10.2007
529
3
#1
Вот такая ситуация.
Опытный пользователь включает Debug LotusScript
И меняет значение Continue на 1, т.е. на True, соответственно входит в редактирование, после отработки скрипта в Querymodechange

tmp1=Evaluate({@if(@IsMember("[Admin]";@UserRoles);"1";"0")})
If tmp1(0)="1" Then
Continue=True
Else
Continue=False
End If
 

Omh

Lotus team
04.07.2007
2 210
1
#2
1. Закрыть дизайн.
2. Перед отсылкой дизайна клиенту, стереть из документа формы все айтемы, содержащие некомпилированный скрипт
3. Подключив внешний файл, писать скрипт в нём (знаю, что так можно, но сам не пробовал)
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#3
ммм.... не понятно для чего вообще раздавать такие прпава?
 

Omh

Lotus team
04.07.2007
2 210
1
#4
Эвалуэйт можно заменить на db.QueryAccessRoles
И вообще, закрыть по AUTHORS полям: то что есть - не защита.
 

susinmn

Well-known member
16.10.2007
529
3
#6
не, весь дизайн не желательно скрывать.
именно нужно скрыть скрипт данной sub.
можно/нет?

по поводу прав, нет времени перелопачивать всю бд
 

morpheus

скриптописец
07.08.2006
3 915
1
#7
susinmn
просто убрать пользователю галочку DeleteDocument
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#9
как по мне то самое оно:
Подключив внешний файл, писать скрипт в нём
делается так, в том месте куда надо пихнуть код пишеться %Include fileName, где fileName - путь к файлу, в котором есть код...
рекомендую использовать библиотеку, к торой будут такие вот скрытые процедуры
в библиотеке в Options прописать %include к файлу с процедурами,
в библиотеке можно даже сделать прокси процедуры для тех, что в файле, чтобы тому, кто использует библиотеку было видно как правиольно вызывать код.
еще можно в библиотеке сделать процедуру, в теле которой написать %include, тогда в этом файле может быть только код именно этой процедуры без ничего, т.е. написали код в библиотеке, отладили, потом вырезали, вставили в файл, в процедуре, вместо кода, написали %include файла, в который код всунули. но так тяжелее, каждую процедуру в своем файле хранить не удобно...
 
13.03.2009
625
1
#10
Еще треба не забыть, что опытный пользователь может открыть документ из вида комбинацией клавиш ctrl+E.
И queryModeChange в этом случае вообще не отработает. Рекомендуеца добавить эту же проверку на postOpen.

Если задача сформулирована так: не дать пользователю перехватить дебагером queryModeChange, то тема полностью раскрыта Omh и Akupaka.

Если хочется иметь железную защиту - то поля authors. Если хочется поиграть в интерфейсные бантики - можно еще рассмотреть вариант с вычисляемым SaveOptions. Оно дебагером не ловица. Перейти в режим редактирования получится - а сохранится нет.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#11
не надо защищать кодом - то что можно запретить на уровне ACL
убрать юзера из полей Authors - и не смогет он ничего
притом - выше автора не давать никому (кроме админа БД) доступа к базе
и плевать на его возможности промотра кода :D
 
K

K-Fire

#12
Вообще то библиотека не подойдет в данном случае. Т.к. это будет что-то вроде
Код:
Sub querymodechange(...)
continue = someFunction()
End sub
И пользователь-хакер перед выходом из querymodechange просто поменяет continue и все.
Так что скрытие кода только одного события (остальные открыты) - это весьма нетривиально, или просто нереально :D


И я кстати не понимаю вообще слов "Если хочется иметь железную защиту - то поля authors". Поля Authors/Readers нужно использовать всегда где есть разделение пользователей по ролям. Вообще всегда. Всякие заглушки это даже не от лени, т.к. с полями дизайн как правило чище и проще, а от неумения ими пользоваться.
 
13.03.2009
625
1
#13
Вообще то библиотека не подойдет в данном случае. Т.к. это будет что-то вроде
Код:
Sub querymodechange(...)
continue = someFunction()
End sub
И пользователь-хакер перед выходом из querymodechange просто поменяет continue и все.
Так что скрытие кода только одного события (остальные открыты) - это весьма нетривиально, или просто нереально :D
Нетривиально, но реально. Решается перегрузкой события формы.

Код:
Public Class TDocController
Private t_uidoc As NotesUIDocument

Public Sub New( i_uidoc As NotesUIDocument )
Set t_uidoc = i_uidoc
On Event Querymodechange From t_uidoc Call QuerymodechangeUIDoc
End Sub

Private Sub QuerymodechangeUIDoc( source As NotesUIDocument , Continue )
Messagebox "Querymodechange catched"
End Sub

End Class
Код класса можно закрыть описанным коллегами методом. В событии queryModeChange формы достаточно положить пустой комментарий( ' )
Узкое место - момент инициализации объекта TDocController. Обычно вешается на queryOpen формы и точно также обходится отладчиком. Но тут пользователю надо догадаться что к чему....

И я кстати не понимаю вообще слов "Если хочется иметь железную защиту - то поля authors". Поля Authors/Readers нужно использовать всегда где есть разделение пользователей по ролям. Вообще всегда. Всякие заглушки это даже не от лени, т.к. с полями дизайн как правило чище и проще, а от неумения ими пользоваться.
Абсолютно согласен. Поэтому и назвал одно - железным, а другое - бантиками.
 
30.05.2006
1 345
11
#14
1. Закрыть дизайн.
2. Перед отсылкой дизайна клиенту, стереть из документа формы все айтемы, содержащие некомпилированный скрипт
3. Подключив внешний файл, писать скрипт в нём (знаю, что так можно, но сам не пробовал)
Что интересно, закрытие дизайна НЕ ПОМЕШАЕТ хакеру запустить дебагер. Кода в нём он действительно не увидит, но некоторые действа можно и "в слепую" провернуть
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#15
ан сколько мне помнится, при закрытом дизайне дебагер не работает, и провернуть там ниче не получится :)
 

susinmn

Well-known member
16.10.2007
529
3
#16
Всем большое спасибо, но правка ACL не получится, т.к. база старая и там куча всякой ерунды уже имеется, которая привязана на editor.
Я, конечно, изначально, рассчитывал, что это делается в момент...