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

Kizarek86

Lotus team
20.07.2007
864
4
#1
Как бы проверить есть у пользователя доступ на редактирование документа или нету?
Есть какой нибудь универсальный механизм, без обхождения всех полей Authors?
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#2
Пока нет. На ideajam много раз просили сделать такую функцию/метод, но воз и ныне там.

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

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

Medevic

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

Kizarek86

Lotus team
20.07.2007
864
4
#4
Печально, в общем сделал через опу)
Тупо пытаюсь сохранить документ и ловлю ошибку.
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#6
kizarek
Наоборот, это элегантный выход :)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#7
а чем вам пересохранить не устраивает? :)
 

TIA

:-)
Lotus team
15.05.2009
790
3
#8
Как бы проверить есть у пользователя доступ на редактирование документа или нету?
Есть какой нибудь универсальный механизм, без обхождения всех полей 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
 

Kee_Keekkenen

Well-known member
05.09.2006
639
4
#9
С использованием 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

Чёрный маг
Lotus team
06.11.2007
3 231
17
#10
С использованием Notes C API никаких лишних сейвов.
многие я так понимаю не знаю фишку с сейвом

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

TIA

:-)
Lotus team
15.05.2009
790
3
#11
>Так что всё что нужно это лишь увидеть флаг ТРУ при сохранении
Многие также не знают, что Save всегда возвращает False если в документе ничего не менялось

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