Ещё раз о правах пользователей

  • Автор темы Idea
  • Дата начала
I

Idea

#1
Столкнулась с очредной проблемой.
У базы данных есть пользователи с правами Author и Manager (2 штуки) (прописано в ACL), им выставлена галочка о том, что они могут удалять документы.
В базе данных храняться доки, в которых есть поле Authors (может быть несколько значений). Есть кнопка для удаления доков (удаление кнопкой Delete заблочено). На кнопке висит ещё раз проверка, точно ли автор из списка собирается удалить документ.
Проблема: Кнопка работает только у Manager-ов. Остальным пользователям выдается окно с обработчиком самого лотуса. (You cannot update or delete the document(s) since you are not listed as an allowable Author for this document(s)).
Подскажите пожалуйста, откуда это безобразие берется.

И ещё, когда пользователь в базе в первый раз создает документ (ещё ничего не сохраняя), у него появляется окошко, в котором спрашивают, выполнять операцию или нет. (Такие обычно выскакивают, когда чужую базу на локалке открываешь). При дальнейшем использовании ничего подобного не происходит. У меня есть догадка о том, что тут играет роль событие "onLoad", в котором нарисовано условие @If(@IsNewDoc; @Do(1+1); @Do(@Command([ToolsRunMacro]; "WhoRead"))) (соответственно запускает серверный агент, создающий док, в котором записывается, кто читал документ). Но что с этим можно поделать - я не представляю.
 
I

IsAvailable

#2
То самое "окошко" - это вероятно оповещение системы защиты. А что на него отвечает пользователь? Если действие запрещается, а это действие обрабатывает удаление документа, то скорей всего тут собака и зарыта... В общем надо б ECL посмотреть у пользователя, мне так думается

ЗЫ

Вместо @Do(1+1) не проще 2 поставить просто? Х-)
Да и с агентом... Может в ходе его выполнения изменения пытаются внестись куда-то, куда у пользователя нет прав их вносить...
 
I

Idea

#3
То самое "окошко" - это вероятно оповещение системы защиты. А что на него отвечает пользователь? Если действие запрещается, а это действие обрабатывает удаление документа, то скорей всего тут собака и зарыта... В общем надо б ECL посмотреть у пользователя, мне так думается

ЗЫ

Вместо @Do(1+1) не проще 2 поставить просто? Х-)
Да и с агентом... Может в ходе его выполнения изменения пытаются внестись куда-то, куда у пользователя нет прав их вносить...

вы прям всё смешали в одну кучу) вторая часть моего вопроса не связана с удалением документов. Наоборот. "Оповещение системы защиты" выскакивает, когда пользователь в первый раз заходит в базу и создает свой первый документ. Причем не сразу, а после того, как он заполнил одно поле и перешел в следующее. В окошке, как вы помните, варианты - не выполнять действие, выполнить 1 раз и тд Если пользователь выбирает выполнять действие (в любом варианте), то собственно все дальше происходит вполне удачно и больше никогда это оповещение не появляется. Вышеупомянутый агент создает новый документ в базе (Response).


А с удалением совсем другое оповещение (я текст точный его напечатала). Порылась в инете - такое чаще всего появляется, когда люди работают через веб, а у нас в клиенте, теряемся в догадках.
 

alb

Well-known member
13.07.2005
212
0
#4
у тебя случайно поле авторс не вычисляемый
 
S

Sandr

#5
Оповещение защиты появляется в случае, если пользователь(сервер), чьим именем подписано выполняющееся действие отсутвует в ECLе пользователя, который работает с базой. Точнее не имя, а имя + выполняемая операция... Подпишите базу сервером, или пользователем с который наверняка есть в ECLе...
 

fedotxxl

Well-known member
09.11.2005
614
0
#6
Пользователи, которые прописаны в поле Author могут изменять содержимое документа? Если они точно могут менять содержимое, но не могут удалить, то
1. ACL - effective access
2. Код кнопки в студию
 
S

Sandr

#7
Насчет того, что он не может удалять документ - он его редактировать вообще может?
 
I

Idea

#8
Для alb:
редактируемое. дефолт - @Author

Для fedotxxl:
Редактировать они могут, изменяют содержимое, сохраняют - всё нормально. Удалять не могут
1) ACL - effective access, - Default (стоит галка на удаление)
2)
Код:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim sh As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim bu As Variant
'Dim au As Variant

Set db = sh.CurrentDatabase 
Set doc = db.GetDocumentByID(ws.CurrentView.CaretNoteID)
If (doc Is Nothing) Then
Msgbox "Не выбран документ для удаления"
Exit Sub
End If

bu = Evaluate({@If(@IsMember(@Name([CN];@UserName); Author) | @IsMember(@UserName;Author); "0"; "1")}, doc) 

If bu(0) = "0" Then

If doc.Responses.Count>0 Then
If 7 = Msgbox ("Удалить этот документ?", 4, "Удаление документа") Then Exit Sub 
End If

Call DeleDoc(doc)

doc.Remove(True)
ws.ViewRefresh
Messagebox "Документ был удален",MB_OK, "Удалено"

Else
Msgbox "Документ может удалить только его автор!"
End If

End Sub

и код вызываемой процедурки DeleDoc:
Код:
Sub DeleDoc(Doc As NotesDocument)
If Doc.Responses.Count>0 Then
Dim tmpdoc As NotesDocument
Dim tmpcol As NotesDocumentCollection

Set tmpcol = doc.Responses
Set tmpdoc = tmpcol.GetFirstDocument
Do Until tmpdoc Is Nothing
Call DeleDoc(tmpdoc)
Set tmpdoc = tmpcol.GetNextDocument(tmpdoc)
Loop
Call tmpcol.RemoveAll(True)
End If
End Sub
 
S

Sandr

#9
Модет он не может респонсы удалять? Потом удалдение главного документа не происходит, так как выполнение вываливается по ошибкедо удаления главного дока...
 
I
#11
Значит вылетает он так:

идет вызов рекурсивной процедуры DeleDoc, выполняется проверка
If Doc.Responses.Count>0 ... выясняется, что у главного дока респонсы есть. Идем глубже Call DeleDoc(tmpdoc), выясняется, что у респонса потомков своих нет. Set tmpdoc = tmpcol.GetNextDocument(tmpdoc) вот тут мы и улетаем.
 
S

Sandr

#12
детская ошибка :) Сразу не обратил внимание... при вызове рекурсивной функции переопределяете коллекцию... При каждом вызове функции она у вас будет другой...

хотя нет.. я не прав...
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#14
<!--QuoteBegin-Sandr+14:11:2007, 15:09 -->
<span class="vbquote">(Sandr @ 14:11:2007, 15:09 )</span><!--QuoteEBegin-->Сразу не обратил внимание... при вызове рекурсивной функции переопределяете коллекцию... При каждом вызове функции она у вас будет другой...

[snapback]85646" rel="nofollow" target="_blank[/snapback]​
[/quote]
Что-то я не понял. Коллекция в каждом вызове своя.
 
S

Sandr

#18
Значит вы не там улетаете... А как минимум на Call tmpcol.RemoveAll(True)

У пользователя нет доступа удалять респонсы...
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#19
Для: Idea
Именно на методе Set tmpdoc = tmpcol.GetNextDocument(tmpdoc)? Вряд ли.
Скорее автор не является автором одного из респонзов.
 
S

Sandr

#20
это как? я всегда думала, что ECL базы, а не пользователя
Вы наверное путаете ACL и ECL... ECL хранится на стороне клиента(кажися в айдише пользователя, но могу ошибаться), туда пишется кто и что может выполнять на вашем компутере...