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

Тема в разделе "Lotus - Программирование", создана пользователем Idea, 14 ноя 2007.

  1. Idea

    Idea Гость

    Столкнулась с очредной проблемой.
    У базы данных есть пользователи с правами 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"))) (соответственно запускает серверный агент, создающий док, в котором записывается, кто читал документ). Но что с этим можно поделать - я не представляю.
     
  2. IsAvailable

    IsAvailable Гость

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

    ЗЫ

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

    Idea Гость


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


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

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    у тебя случайно поле авторс не вычисляемый
     
  5. Sandr

    Sandr Гость

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

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Пользователи, которые прописаны в поле Author могут изменять содержимое документа? Если они точно могут менять содержимое, но не могут удалить, то
    1. ACL - effective access
    2. Код кнопки в студию
     
  7. Sandr

    Sandr Гость

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

    Idea Гость

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

    Для fedotxxl:
    Редактировать они могут, изменяют содержимое, сохраняют - всё нормально. Удалять не могут
    1) ACL - effective access, - Default (стоит галка на удаление)
    2)
    Код (Text):
    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:
    Код (Text):
    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
     
  9. Sandr

    Sandr Гость

    Модет он не может респонсы удалять? Потом удалдение главного документа не происходит, так как выполнение вываливается по ошибкедо удаления главного дока...
     
  10. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Idea
    А дебаггер что говорит?
     
  11. Idea

    Idea Гость

    Значит вылетает он так:

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

    Sandr Гость

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

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

    Idea Гость

    А как же тогда эта хрень работала полгода?:))))
     
  14. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--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]
    Что-то я не понял. Коллекция в каждом вызове своя.
     
  15. Idea

    Idea Гость

    это как? я всегда думала, что ECL базы, а не пользователя
     
  16. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Idea
    Куда улетаете? Ошибка какая? :)
     
  17. Idea

    Idea Гость

    You cannot update or delete the document(s) since you are not listed as an allowable Author for this document(s)
     
  18. Sandr

    Sandr Гость

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

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Idea
    Именно на методе Set tmpdoc = tmpcol.GetNextDocument(tmpdoc)? Вряд ли.
    Скорее автор не является автором одного из респонзов.
     
  20. Sandr

    Sandr Гость

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

Поделиться этой страницей