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

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

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

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

User Acl & Postopendocument

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
Всем привет
вобщем проблем следующий:
агентом создаю несколько респонзов. в каждом респонзе есть поле "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

но не пашет:)........подскажите плз где ошибка....
 
O

Omh

Жесть.
Код:
db.QueryAccessRoles
вернёт тебе все роли данного человека.

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

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

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
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)
 
O

Omh

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

Если хочешь защитить документ бантиками, то юзай примерно такой скрипт на 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]
 
H

hosm

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

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
OKEN
ну вчара кажется разобрался с помощю Akupaka :what?: так что жду ево во Львове:))
 
H

hosm

Тогда Akupaka - респект )
И ты молодец )
 
Мы в соцсетях:

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