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

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

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

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

Права На Редактирование Документов

Kizarek86

Green Team
20.07.2007
871
7
BIT
37
Как бы проверить есть у пользователя доступ на редактирование документа или нету?
Есть какой нибудь универсальный механизм, без обхождения всех полей Authors?
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
55
Пока нет. На ideajam много раз просили сделать такую функцию/метод, но воз и ныне там.

Можно облегчить себе "участь" - застандартизировать в своих приложухах item'ы для хранения "доступов". Обычно хватает 4 отдельных item'а для:
- серверов;
- групп;
- ролей;
- персон.

Добавлено: в условиях имеющегося приложения пробегаться по всем item'ам и из них пытаться определять...
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Агентом создавать вспомогательный документ с полем Readers. В него запихнуть всех из Authors-полей основного документа.
В нужный момент проверяем существование вспомогательного документа.
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
37
Печально, в общем сделал через опу)
Тупо пытаюсь сохранить документ и ловлю ошибку.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
55
kizarek
Наоборот, это элегантный выход :)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
а чем вам пересохранить не устраивает? :)
 
T

TIA

Как бы проверить есть у пользователя доступ на редактирование документа или нету?
Есть какой нибудь универсальный механизм, без обхождения всех полей Authors?
С использованием Notes C API никаких лишних сейвов. Метод не сработает если права даются/отбираются после получения документа из БД:

Код:
Declare Private Sub NSFNoteGetInfo_WIN32 Lib "nnotes.dll" Alias "NSFNoteGetInfo" (Byval hNote&, Byval Note_Member%, Value_ptr%)

Function IsDocumentWritable(cdoc as NotesDocument) as integer

On Error Goto ErrHnd
If False Then
ErrHnd: 		Error Err, Error$ & Chr(10) & Getthreadinfo(1) & " (line " & Erl & ")"
End If

Const NOTE_FLAGS%			=&B111
Const NOTE_FLAG_READONLY%	=&B001

Dim NoteFlags%

If cdoc Is Nothing Then Error 1234, "Wrong argument"

Call cdoc.GetItemValue("$$AccessAnyFieldForInitializeHandle")
Call NSFNoteGetInfo_WIN32(cdoc.Handle, NOTE_FLAGS, NoteFlags)
IsDocumentWritable=(NoteFlags And NOTE_FLAG_READONLY)=0
End Function
 
K

Kee_Keekkenen

С использованием Notes C API никаких лишних сейвов. Метод не сработает если права даются/отбираются после получения документа из БД:

Код:
Declare Private Sub NSFNoteGetInfo_WIN32 Lib "nnotes.dll" Alias "NSFNoteGetInfo" (Byval hNote&, Byval Note_Member%, Value_ptr%)

Function IsDocumentWritable(cdoc as NotesDocument) as integer

On Error Goto ErrHnd
If False Then
ErrHnd: 		Error Err, Error$ & Chr(10) & Getthreadinfo(1) & " (line " & Erl & ")"
End If

Const NOTE_FLAGS%			=&B111
Const NOTE_FLAG_READONLY%	=&B001

Dim NoteFlags%

If cdoc Is Nothing Then Error 1234, "Wrong argument"

Call cdoc.GetItemValue("$$AccessAnyFieldForInitializeHandle")
Call NSFNoteGetInfo_WIN32(cdoc.Handle, NOTE_FLAGS, NoteFlags)
IsDocumentWritable=(NoteFlags And NOTE_FLAG_READONLY)=0
End Function

да, обычно этим и пользуются, однако вопрос, а что дает этот вызов
Call cdoc.GetItemValue("$$AccessAnyFieldForInitializeHandle") ?

ps. или это сделано для вида - типа хоть какое-то действие с документом, чтоб красного малевича не словить?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
С использованием Notes C API никаких лишних сейвов.
многие я так понимаю не знаю фишку с сейвом

Фишка:
Если вы беретё док и тут же его сохраняете без измений в документе чего либо то док не сохраняется - не меняется дата модификации
Так что всё что нужно это лишь увидеть флаг ТРУ при сохранении :)
 
T

TIA

>Так что всё что нужно это лишь увидеть флаг ТРУ при сохранении
Многие также не знают, что Save всегда возвращает False если в документе ничего не менялось

Добавлено: >или это сделано для вида - типа хоть какое-то действие с документом, чтоб красного малевича не словить?
Ответ в имени поля :) AccessAnyFieldForInitializeHandle.
Т.е. cdoc.Handle не определён пока не будет какого-либо чтения из документа.
 
Мы в соцсетях:

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