Чтобы только автор документа мог редактировать его

  • Автор темы -
  • Дата начала
Статус
Закрыто для дальнейших ответов.

Гость
#1
Хочу скрыть кнопку "Изменить документ" от всех пользователей, которые не являются авторами этого документа,
Подскажите пожалуйста как это сделать?
 
O

oshmianski

Гость
#2
Для: Светлана1342
сделать поле в доке, куда складывать авторов, а на Hide when кнопки @IsMember от @UserName
 
R

root

Гость
#4
Для: Светлана1342
для для кнопки в hide action написать условие по которому вернет значение true и усе
 

Гость
#5
А вот еще вопрос а как сделать, чтобы пользователь по двойному нажатию в документе не смог его редактировать... ? В событии наверное нужно каком-нибудь Query....() прописать,
Подскажите кто знает....
 
O

oshmianski

Гость
#6
Для: Светлана1342
есть бантик: у формы есть метод QueryModeChange, туда можно написать условие

if Условие then Continue = true else Continue = flase

но это обходится Ctrl + E из представления
 

Гость
#7
Понятненько, плохо конечно что обходится Ctrl+E,

а у меня вот и бантика то нет...
 

pbnoob

Well-Known Member
25.08.2006
135
0
37
#8
<!--QuoteBegin-Светлана1342+2:02:2007, 13:24 -->
<span class="vbquote">(Светлана1342 @ 2:02:2007, 13:24 )</span><!--QuoteEBegin-->а у меня вот и бантика то нет...
[snapback]54820" rel="nofollow" target="_blank[/snapback]​
[/quote]
я полагаю, что это бантики :) :D :D

PS не смог из буфера что-то вставить :)
Посмотреть вложение Image1.bmp
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#10
<!--QuoteBegin-Светлана1342+2:02:2007, 13:16 -->
<span class="vbquote">(Светлана1342 @ 2:02:2007, 13:16 )</span><!--QuoteEBegin-->А вот еще вопрос а как сделать, чтобы пользователь по двойному нажатию в документе не смог его редактировать... ? В событии наверное нужно каком-нибудь Query....() прописать,
[snapback]54817" rel="nofollow" target="_blank[/snapback]​
[/quote]
А зачем? Есть же поле типа Автор. Если не автор, но ни двойное нажатие не поможет, ни ctrl-e и т.п.
 

RAJ

Well-Known Member
17.01.2007
440
0
38
Украина, Днепр
#11
Есть функция @Author, которая возвращает список авторов, просматривая соответствующие поля(более подробно в хелпе).
Для Hide формулы:
!@Contains(@Author;@UserName)

Как было указано в предыдущих ответах, от редактирования документа другим пользователем с правами "Редактор" это не спасёт и надо писать ограничение в QueryModeChange. Я предлагаю следующий код:


Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
Dim result As Variant

result = Evaluate("@Contains(@Author;@UserName)")

Continue = (result(0)!=0)

End Sub
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#12
<!--QuoteBegin-RAJ+2:02:2007, 15:03 -->
<span class="vbquote">(RAJ @ 2:02:2007, 15:03 )</span><!--QuoteEBegin-->Есть функция @Author, которая возвращает список авторов, просматривая соответствующие поля(более подробно в хелпе).
[snapback]54845" rel="nofollow" target="_blank[/snapback]​
[/quote]
Не пойдет. Она возвращает содержимое только первого поля типа Authors. Если таких нет, то начинает возвращать содержимое других полей вплоть до $UpdatedBy.
 

RAJ

Well-Known Member
17.01.2007
440
0
38
Украина, Днепр
#13
Не пойдет. Она возвращает содержимое только первого поля типа Authors. Если таких нет, то начинает возвращать содержимое других полей вплоть до $UpdatedBy.
Если документ, будет создан изначально с вышеприведенными ограничениями для НЕ АВТОРОВ документа, то содержимое полей вплоть до $UpdatedBy, будет содержать нашего автора.

В крайнем случае создаём "Вычислимое при создании" поле с формулой @UserName и дальше его проверяем вместо функции @Author
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#14
<!--QuoteBegin-RAJ+2:02:2007, 15:21 -->
<span class="vbquote">(RAJ @ 2:02:2007, 15:21 )</span><!--QuoteEBegin-->Если документ, будет создан изначально с вышеприведенными ограничениями для НЕ АВТОРОВ документа, то содержимое полей вплоть до $UpdatedBy, будет содержать нашего автора.

В крайнем случае создаём "Вычислимое при создании" поле с формулой @UserName и дальше его проверяем вместо функции @Author
[snapback]54852" rel="nofollow" target="_blank[/snapback]​
[/quote]
Что-то я не понимаю. Если я создам поле типа Authors со значением [Admin] и помещу его первым на форме, то наша функция @Author пойдет лесом.
 

RAJ

Well-Known Member
17.01.2007
440
0
38
Украина, Днепр
#15
есть бантик: у формы есть метод QueryModeChange, туда можно написать условие

if Условие then Continue = true else Continue = flase

но это обходится Ctrl + E из представления
Ну и это можно заблокировать в QuerySave тоже можем проверить на автора и запретить сохранение.

result = Evaluate("@Contains(@Author;@UserName)")
Continue = (result(0)!=0)

Пусть "злодей" меняет документ, но сохранить несможет :D

P.S.: @Author, конечно можем и заменить на поле с именем автора

Что-то я не понимаю. Если я создам поле типа Authors со значением [Admin] и помещу его первым на форме, то наша функция @Author пойдет лесом.
Согласен с вами :(
Тут уже пошли детали: роли и т.п. Чтобы дать рецепт для данной базы информации не достаточно(лично для меня).
Решение надо принимать для каждой базы в отдельности взависисмости от её организации.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#17
<!--QuoteBegin-RAJ+2:02:2007, 16:22 -->
<span class="vbquote">(RAJ @ 2:02:2007, 16:22 )</span><!--QuoteEBegin-->P.S. Функция @Author не пойдёт лесом, а проверит другие поля "Авторов", включая $UpdatedBy
[snapback]54865" rel="nofollow" target="_blank[/snapback]​
[/quote]
Хелп говорит обратное, и практика подтверждает это.
@Author uses the following instructions (in the sequence outlined below) to find document author(s) and return the appropriate text list:
1. Search the document for a field of type Authors. If there is one, return the name(s) stored there. (If there are multiple Authors fields, returns the contents of the first Authors field found in the document.)
2. If there is no Authors field, look for a field called From. If there is a From field, look for the field FromDomain.
If both fields are found, combine the two fields, separating them by an @ sign (as in, Mary Tsen@AcmeWest).
Otherwise, return the contents of the From field only.
3. If there is no From field, look for a field named $UpdatedBy. If there is one, return the contents of the field.
4. If there is no $UpdatedBy field and this is a new document (not yet saved), return the current user's name.
5. If none of the above can be found, return the null string ("").
 

Гость
#19
ну а как же быть раз "лесом" @Author работь не хочет...
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#20
<!--QuoteBegin-Светлана1342+5:02:2007, 08:52 -->
<span class="vbquote">(Светлана1342 @ 5:02:2007, 08:52 )</span><!--QuoteEBegin-->ну а как же быть раз "лесом" @Author работь не хочет...
[snapback]54993" rel="nofollow" target="_blank[/snapback]​
[/quote]
Имхо, не заморачиваться.
В поле Автор могут быть также внесены группы и роли. Т.е. придется и группы разбирать, и роли проверять. Также проверять доступ (если Editor и выше, то кнопка доступна).

Можно сделать кнопку редактирования с таким кодом:
Код:
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument
uidoc.EditMode = True
If Not uidoc.EditMode Then Msgbox "Вам нельзя редактировать этот документ"
 
Статус
Закрыто для дальнейших ответов.