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

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

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

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

Как добавить роль в поле автор или ридер?

seoman2

Green Team
17.02.2010
504
1
BIT
45
Как добавить роль, к примеру [Admin] в поле автор или ридер документа ?
 
H

hosm

в чем проблемы?
Код:
doc.replaceItemValue("ADMAuthor", "[Admin]").IsAuthors = True 
doc.replaceItemValue("ADMReader", "[Admin]").IsReaders = True

Добавлено: или проблемы в том, чтоб добавить в мультизначное поле?
 
O

Omh

<!--shcode--><pre><code class='vb'>Dim V As Variant
V = Doc.GetItemValue(READERS_FIELD)
V = ArrayAppend(V, "[Admin]")
V = ArrayUnique(V)
Call Doc.ReplaceItemValue(READERS_FIELD, V)
Call Doc.Save(True, False)[/CODE]
Не?

Можно, по желанию, одной строчкой записать.
Можно, по желанию, ещё Fulltrim сделать.
 
O

Omh

Ну, не до конца молодец
До конца молодец был бы так примерно так:
<!--shcode--><pre><code class='vb'>Const READERS_FIELD = "FieldNameWithReaders"
Const ROLE = "[Admin]"
Dim V As Variant

V = Doc.GetItemValue(READERS_FIELD)
if IsNull(ArrayGetIndex(V, ROLE)) then
V = ArrayAppend(V, ROLE)
' V = ArrayUnique(V) 'ну вот этот тут избыточно, скажем честно
V = Fulltrim(V) 'что бы не было пустого элемента, если добавляем в несуществующий айтем

Dim Item As NotesItem
Set Item = Doc.ReplaceItemValue(READERS_FIELD, V)
if Not Item.IsReaders then Item.IsReaders = True
Call Doc.Save(True, False)
End if[/CODE]
 
A

alik86

А можно для поля READERS_FIELD прописать Value:
"[Admin]" : READERS_FIELD
;)
 
H

hosm

alik86
... и запустить агент с собакой ToolsRefreshAllDocs @Command ?
 
O

Omh

А можно сменить формулу в поле и потом зафигарить по всем документам ComputeWithForm ;)
А как же бритва Оккама? :ya_za:
 
A

alik86

OKEN Ну так не до конца понятна задача. Может человек пишет своё приложение и хочет изначально заложить в него товарищам с ролью [Admin] возможность видеть все доки. Тогда компутед полю READERS_FIELD прописываем Value "[Admin]" : READERS_FIELD и усё. А если надо добавлять в уже существующем приложении в уже существующие документы, тогда другой вопрос... ;)
 
T

TIA

Omh
В Вашем примере, если поле отсутствовало, оно не станет авторским.

Ещё вариант. Чуть короче.
Код:
Set itm = Doc.GetFirstItem(READERS_FIELD)
if itm is nothing then
Doc.ReplaceItemValue(READERS_FIELD, ROLE).IsReaders=True
Elseif not itm.Contains(ROLE) then
itm.AppendToTextList(ROLE)
end if
Ещё короче ;)
Код:
v =Evaluate({FIELD Readers:=@Trim(@Unique(Readers:"[Admin]"));""}, doc)
Doc.GetFirstItem("Readers").IsReaders = True
Для добавления в начало
Код:
Set v = Doc.GetItemValue(READERS_FIELD)
if IsNull(ArrayGetIndex(v, ROLE)) then
Set itm=Doc.ReplaceItemValue(READERS_FIELD, ROLE)
itm.IsReaders=True
if v(0)<>"" then itm.AppendToTextList(v)
End if
 
H

hosm

alik86, вы правы.
но я рассматривала вопрос в контексте этого топика: link removed правда, там оказалось всё гораздо проще)
 
Мы в соцсетях:

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