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

Тема в разделе "Lotus - Программирование", создана пользователем susinmn, 27 апр 2009.

  1. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Вот такая ситуация.
    Опытный пользователь включает 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
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    1. Закрыть дизайн.
    2. Перед отсылкой дизайна клиенту, стереть из документа формы все айтемы, содержащие некомпилированный скрипт
    3. Подключив внешний файл, писать скрипт в нём (знаю, что так можно, но сам не пробовал)
     
  3. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ммм.... не понятно для чего вообще раздавать такие прпава?
     
  4. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Эвалуэйт можно заменить на db.QueryAccessRoles
    И вообще, закрыть по AUTHORS полям: то что есть - не защита.
     
  5. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Засунуть всё в Controlled Access Section. :D
     
  6. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    не, весь дизайн не желательно скрывать.
    именно нужно скрыть скрипт данной sub.
    можно/нет?

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    susinmn
    просто убрать пользователю галочку DeleteDocument
     
  8. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
  9. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    как по мне то самое оно:
    делается так, в том месте куда надо пихнуть код пишеться %Include fileName, где fileName - путь к файлу, в котором есть код...
    рекомендую использовать библиотеку, к торой будут такие вот скрытые процедуры
    в библиотеке в Options прописать %include к файлу с процедурами,
    в библиотеке можно даже сделать прокси процедуры для тех, что в файле, чтобы тому, кто использует библиотеку было видно как правиольно вызывать код.
    еще можно в библиотеке сделать процедуру, в теле которой написать %include, тогда в этом файле может быть только код именно этой процедуры без ничего, т.е. написали код в библиотеке, отладили, потом вырезали, вставили в файл, в процедуре, вместо кода, написали %include файла, в который код всунули. но так тяжелее, каждую процедуру в своем файле хранить не удобно...
     
  10. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Еще треба не забыть, что опытный пользователь может открыть документ из вида комбинацией клавиш ctrl+E.
    И queryModeChange в этом случае вообще не отработает. Рекомендуеца добавить эту же проверку на postOpen.

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

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    не надо защищать кодом - то что можно запретить на уровне ACL
    убрать юзера из полей Authors - и не смогет он ничего
    притом - выше автора не давать никому (кроме админа БД) доступа к базе
    и плевать на его возможности промотра кода :D
     
  12. K-Fire

    K-Fire Гость

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


    И я кстати не понимаю вообще слов "Если хочется иметь железную защиту - то поля authors". Поля Authors/Readers нужно использовать всегда где есть разделение пользователей по ролям. Вообще всегда. Всякие заглушки это даже не от лени, т.к. с полями дизайн как правило чище и проще, а от неумения ими пользоваться.
     
  13. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Нетривиально, но реально. Решается перегрузкой события формы.

    Код (Text):
    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 формы и точно также обходится отладчиком. Но тут пользователю надо догадаться что к чему....

    Абсолютно согласен. Поэтому и назвал одно - железным, а другое - бантиками.
     
  14. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Что интересно, закрытие дизайна НЕ ПОМЕШАЕТ хакеру запустить дебагер. Кода в нём он действительно не увидит, но некоторые действа можно и "в слепую" провернуть
     
  15. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ан сколько мне помнится, при закрытом дизайне дебагер не работает, и провернуть там ниче не получится :)
     
  16. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Всем большое спасибо, но правка ACL не получится, т.к. база старая и там куча всякой ерунды уже имеется, которая привязана на editor.
    Я, конечно, изначально, рассчитывал, что это делается в момент...
     
Загрузка...

Поделиться этой страницей