• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Запрет открытия Lock'ного док-та

  • Автор темы morpheus
  • Дата начала
M

morpheus

Вопрос
Э.. народ , а случаем никто не предотвращал открытие/редактирование документов более чем одним (1) пользователем ? Ну .. э .. типа если один человек открыл (читает / редактирует) документ то уже никто другой не может открыть документ [даже для просмотра].

Суть
В 6ке появился новый метод Lock у notesDocument. Он запрещает редактирование документа более чем одному пользователю одновременно. А вот открытие этого документа, при условии что ктото другой(в этот момент) уже редактирует? Как отследить?

Ответ

в Queryopen ставим
Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant) 
Dim doc As NotesDocument 
Dim session As New notessession	
Dim user As notesname 
Dim Lockers As Variant 
Set doc = source.Document 
expression = "@DocLock([STATUS])" 
Lockers= Evaluate(expression,Doc) 
Set user = New NotesName(Cstr(session.UserName)) 
If Cstr(Lockers(0))="" Then 
Continue=True 
Else 
Continue=False 
Forall names In lockers 
If names= Cstr(user.Abbreviated) Then 
Continue=True 
Else 
Continue=False 
End If 
End Forall	  
End If 
If	Continue=False Then 
Msgbox "Документ сейчас открыт пользователем " + Cstr(Lockers(0)) + Chr(13) + "Свяжитесь с ним или администратором если вам необходимо открыть этот документ" + Chr(13) + "Или попросите пользователя открыть этот документ и закрыть.",64,"Locking" 
End If 
End Sub

в PostOpen ставим
Код:
@If(@DocLock([Status]) = "";@Do(@DocLock([Lock]);@StatusBar("Locking Succesfull"));@StatusBar("Already locked. Document is already locked by " + @DocLock([Status])))

в QueryClose + Terminate ставим
Код:
@If(@IsNotMember(@V3UserName;@DocLock([Status]));@StatusBar("Not authorized Document was locked by " +@DocLock([Status]) + ". Contact the lock owner");@Do(@DocLock([Unlock]);@StatusBar("Document Unlocked")))

Автор -



Комментарий модератора
Не совсем понятно почему автор не использует LockHolders property , а использует
expression = "@DocLock([STATUS])" Lockers= Evaluate(expression,Doc)

Не забываем включить в опциях БД возможность лочить документы, и указываем Master lock server
 

Вложения

  • LOck.jpg
    LOck.jpg
    22,8 КБ · Просмотры: 616
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!