User Acl & Postopendocument

Cleric-Lviv

Lotus team
03.01.2008
600
0
#1
Всем привет
вобщем проблем следующий:
агентом создаю несколько респонзов. в каждом респонзе есть поле "UserRole" в которое прописивию роль подразделения. в каждом респонзе своя роль.
дальше пробую открить доку
смисл такой если нету роль то пользователь может только читать... если есть роль может редактировать
Код:
Dim ses As New NotesSession 
Dim db As NotesDatabase 
Dim acl As NotesACL 
Dim entry As NotesACLEntry
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument

Set db = ses.CurrentDatabase
Set ws = New NotesUIWorkspace
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
'v = doc.GetItemValue("UnitRole")(0)
Set acl = db.ACL 
Set entry = acl.GetEntry( ses.UserName ) 

If ( entry Is Nothing ) Then 
uidoc.EditMode = False

Elseif Not ( entry.IsRoleEnabled( doc.GetItemValue("UnitRole")(0) )) Then 
continue = False
uidoc.EditMode=True
End If
но не пашет:)........подскажите плз где ошибка....
 

Omh

Lotus team
04.07.2007
2 210
1
#2
Жесть.
Код:
db.QueryAccessRoles
вернёт тебе все роли данного человека.

Хинт: человека в ACL можно указать неявно.

И вообще, причём тут PostOpen?
Тут скорее QueryOpen + QueryModeChange
Ну или вообще использование полей типа Author.
-----------------
Конечно тут надо использовать Authors.
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#3
Omh

да путаюсь я с етими полями.....впринципе когдя создаю документ то прописиваю... но все равно люди без ролей могут редактировать...
Код:
Set res = db.CreateDocument
res.form = "PrimaryAnalysis"

uniq = doc.GetItemValue("Unique")(0)
Set item = doctemp.GetFirstItem("UnitName")
Set itemall = New NotesItem(res, "Role", "*")
Set itemrole = doctemp.GetFirstItem("UnitRole")
itemrole.IsAuthors = True
itemall.IsReaders = True


Call res.CopyItem(item, "UnitName")
Call res.CopyItem(itemrole, "UnitRole")
Call res.CopyItem(itemall, "Role")			
Call res.ReplaceItemValue("Unique", uniq)

Call res.MakeResponse(doc)		
Call res.Save(True,False)
 

Omh

Lotus team
04.07.2007
2 210
1
#4
Мне кажется, я слишком стар для этого дерьма.
Я абсолютно не понимаю, что происходит в приведённом тобой куске кода.
Аццкое копирование айтемов в пределах одного документа выше моего понимания.

Если хочешь защитить документ бантиками, то юзай примерно такой скрипт на QueryModeChange/QueryOpen:
<!--shcode--><pre><code class='vb'>Dim Roles As Variant
Roles = db.QueryAccessRoles(session.UserName)
if IsNull(ArrayGetIndex(Roles, doc.getitemValue(YOUR_FIELD_WITH_ROLE)(0)))) then Continue = False[/CODE]
 

hosm

* so what *
18.05.2009
2 442
6
#6
да путаюсь я с етими полями.....впринципе когдя создаю документ то прописиваю... но все равно люди без ролей могут редактировать...
Советую разобраться изучить, это база.
Authors поля позволяют ограничить редактирование документа только пользователям с уровнем доступа на базу Автор.
Посмотрите, что в итоге получилось в документе, поля действительно авторс и ридерс?
[post="155464"]Тут[/post] правильно сказано, нельзя так: acl.GetEntry( ses.UserName ) .
Akupaka - говорить по делу...
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#7
OKEN
ну вчара кажется разобрался с помощю Akupaka :what?: так что жду ево во Львове:))