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

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

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

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

Проверка номера документа

  • Автор темы Domino_Maddog
  • Дата начала
D

Domino_Maddog

г-да, требуется Ваша подсказка куда и как копать.
Есть некое приложение в котором пользователи в документ вводят номер.В приложение есть поля Reders и Authors.
До этого проверка осуществлялась в QuerySave дока так как номер надо проверять до сохранения, но тут полезли,
косяки из-за того что пользователи имею не всегда доступ к другим доком. Задумался написать агент который бы стартовал
с правами сервера и возвращал параметр о возможности записи, но не совсем понял как это делать.
Можно делать через поля дока, но хотелось бы это более правильно организовать.
 
D

Domino_Maddog

это приложение работает с внешними контрагентами, туда заносятся номера счетов на оплату (которые надо оплачивать), автоматом не получится. Внутр нумерация есть.
Нужен именно контроль номера счета.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Включаешь блокировку(F1 + Document locking), создаешь документ, хранящий номер(или номера). Когда надо получить номер, то блокируешь этот документ, получаешь номер и разблокируешь обратно.
 
K

Klido

ему скорее надо проверить нет ли уже такого номера, а у автора нет возможности увидеть доки...
ну да, я бы агентом под сервером и делал...
 
D

Domino_Maddog

ему скорее надо проверить нет ли уже такого номера, а у автора нет возможности увидеть доки...
ну да, я бы агентом под сервером и делал...

Именно это мне и надо.
Вопрос как передавать параметр, через поле этого дока или как то ещё.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Дублируй номера в отдельных открытых документах.
 
K

Klido

а зачем дублировать?
юзер - автор, делаешь tmp док, передаешь его в агент, который в док же запишет да или нет, на выходе считываешь и прибиваешь (или админским агентом косишь по факту)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Domino_Maddog
создай отдельную базу, туда выкладываются маленькие доки, содержащие уже зарегистрированные номера и по этой базе делай сверку ;)
 
D

Domino_Maddog

а зачем дублировать?
юзер - автор, делаешь tmp док, передаешь его в агент, который в док же запишет да или нет, на выходе считываешь и прибиваешь (или админским агентом косишь по факту)

Call agent.run (doc) ?
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
55
Люди, проставляющие номера счетов, в большинстве случаев относятся к одной группе или роли по доступу к функционалу. Как вариант: добавить роль/группу и при создании дока вносить её в поле типа Readers или Authors.
Если надо чтобы оператор видел только свои доки, то либо внедрённый вид + Show single category либо с помощью фильтра (@SetViewInfo).
 
30.06.2006
141
5
BIT
0
Метод Run запустит агента локально от имени текущего пользователя, если надо запустить на сервере, то используй метод RunOnServer (его описание есть в справке).


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

В плане реализации намного проще и надежней - добавляешь в QuerySave обработчик, который:

1. Открывает представление, в котором хранятся счетчики и ищет документ-счетчик с номером текущего документа
2. Если его нет, то сохраняешь документ (все нормально)
3. Если такой счетчик есть, то сравниваешь сохраненный в нем UNID с UNID'ом текущего документа и если они не равны, то либо обновляешь номер, либо сигнализируешь об этом пользователю

Вот пример кода из приложения с подобной задачей (счетчики хранятся в самой базе):

Код:
Dim session as NotesSession
Dim db as NotesDatabase
Dim numberDoc as NotesDocument
Dim numberView as NotesView
Dim entry As NotesViewEntry
Dim taskNumber As String

Set session = New NotesSession
Set db = session.CurrentDatabase
Set numbersView = db.GetView("TaskNumbersAll")
taskNumber = taskDoc.TaskNumber(0)
Set entry = numbersView.GetEntryByKey(taskNumber)
If Not entry Is Nothing Then
Set numberDoc = entry.Document
End If

If numberDoc Is Nothing Then
' Если документа-счетчика нет, то создаем его
Call TaskNumber_CreateDoc()
Else
If LCase(numberDoc.Unid(0)) <> LCase(taskDoc.UniversalID) Then
' Если есть, но не от этого документа, то сообщаем 
' пользователю об ошибке или присваиваем документу новый номер
' ...
End If
End If
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
55
Кирилл Шваб, см. коммент №3; речь совсем не о том.
 
D

Domino_Maddog

Метод Run запустит агента локально от имени текущего пользователя, если надо запустить на сервере, то используй метод RunOnServer (его описание есть в справке).


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

В плане реализации намного проще и надежней - добавляешь в QuerySave обработчик, который:

1. Открывает представление, в котором хранятся счетчики и ищет документ-счетчик с номером текущего документа
2. Если его нет, то сохраняешь документ (все нормально)
3. Если такой счетчик есть, то сравниваешь сохраненный в нем UNID с UNID'ом текущего документа и если они не равны, то либо обновляешь номер, либо сигнализируешь об этом пользователю

Вот пример кода из приложения с подобной задачей (счетчики хранятся в самой базе):

у меня похожий код, только еще поля автор и ридер и доступа порой к доку нет.Тогда начинают копится повторы.


Добавлено:
Люди, проставляющие номера счетов, в большинстве случаев относятся к одной группе или роли по доступу к функционалу. Как вариант: добавить роль/группу и при создании дока вносить её в поле типа Readers или Authors.
Если надо чтобы оператор видел только свои доки, то либо внедрённый вид + Show single category либо с помощью фильтра (@SetViewInfo).

Хорошое предложение но у меня не всегда так, а еще есть разные компании и т.д. много оговорок :) и желание переделывать все UI у меня то же нет.
 
T

TIA

Можно делать через поля дока, но хотелось бы это более правильно организовать.
Ещё один вариант -- сделать скрытую категоризованную по номеру вьюшку и искать нужный Entry по ключу. Галку "Don't show empty category" не устанавливаем. Фишка в том, что категории отображаются все, вне зависимости от прав текущего пользователя на документы.
 
30.06.2006
141
5
BIT
0
у меня похожий код, только еще поля автор и ридер и доступа порой к доку нет.Тогда начинают копится повторы.
А зачем добавлять поля читатели/редакторы к документам-счетчикам?
Смысл этих счетчиков в виде отдельных документов как раз в том, что они доступны всем пользователям (в отличии от самих документов, у которых задан доступ).

TIA,

Интересный способ, кстати. :)
 
D

Domino_Maddog

Ещё один вариант -- сделать скрытую категоризованную по номеру вьюшку и искать нужный Entry по ключу. Галку "Don't show empty category" не устанавливаем. Фишка в том, что категории отображаются все, вне зависимости от прав текущего пользователя на документы.
Точно !!!!!!
Пасип....так и сделал...

Добавлено:
А зачем добавлять поля читатели/редакторы к документам-счетчикам?
Смысл этих счетчиков в виде отдельных документов как раз в том, что они доступны всем пользователям (в отличии от самих документов, у которых задан доступ).

запарился...не внимательно прочитал... :)
 
Мы в соцсетях:

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