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

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

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

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

Блокировка определенных полей в форме

  • Автор темы medin84
  • Дата начала
M

medin84

Здравствуйте!
Помогите пожалуйста!
Буду краток.

Мне нужно заблокировать определенные поля в форме по условию.
Условие: допустим роль пользователя не относится к [ALL]
Этих полей много и у меня есть мысль, сделать список этих полей и если условие истинно сделать их не доступными для редактирования.
Но эти пользователи могут их видеть, поэтому просто скрывать эти поля не пойдет!

Спасибо!
 
M

medin84

Вы бы не могли поконкретней описать суть.
Я посмотрел Help, не понял.
 
M

morpheus

Для: medin84
В дизайнере меню Create - Section- Controlled Access

дальше интуитивно
 
H

Hedg

Создаёшь на форме Секцию с контролируемым доступом, и в неё помешаешь поля котрые нужно блокировать.

Create/Section/Controlled Accsess
 
K

Kee_Keekkenen

в свойствах поля 6-я закладка "Paragraph hide when" внизу в окошке пишем
@IsNotMember("[ALL]"; @UserRoles) и ставим галку "Hide paragraph if formula is true"

таким образом, поле будет видно только пользователям с ролью [ALL]
 
E

Elena Nefedova

Дополнение к рекомендации: Kee_Keekkenen
IBM рекомендует создавать поле Computed for Display, в котором вычислять @UserRoles и тому подобные сложные формулы. Далее ссылаться при скрытии и доступе не на формулы, а на эти вычисляемые поля - это дает существенный выигрыш производительности в случае использования @UserRoles и ей подобных формул более одного раза на форме.
 
M

medin84

Дела в том что эти поля должны быть видны!
Их нелзя просто скрывать!
Суть в том что пользователи должны видеть данные! Поэтому вскырвать по формуле непойдет!
Мне нужно просто чтобы они не могли вносить в них изменения!
 
A

Azrael

1) свойство Input Enabled
2) скрывать сами поля, показывать <computed text> - всё по формулам скрытия полей, т.е. если показывается поле - скрывается computed text, и наоборот, в зависимости от логики
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Создаешь Controlled Access Section.
Пихаешь туда поля.
В свойствах секции на второй закладке Expand/Collapse везде (и для Editors и для Non-Editors) ставишь Auto-expand секции.
Далее идешь на третью закладку Formula. Тип Computed for Display. В формуле пишешь "[ALL]".
Дальше идешь на последнюю закладку Section Hide When. И прячешь её от всего (или условие @True, или галки везде).
Усё.

Можно еще поиграться со свойством Input Enabled, если версия клиента 7.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
<!--QuoteBegin-Azrael+28:06:2007, 14:37 -->
<span class="vbquote">(Azrael @ 28:06:2007, 14:37 )</span><!--QuoteEBegin-->Почему именно 7? В 6.5 тоже вполне нормально работает.
[snapback]70825" rel="nofollow" target="_blank[/snapback]​
[/quote]
Только со стилем Native OS Style.
В 7-ке работает и со стилем Notes style.
 
M

medin84

Этот код если поставить в PostOpen или QueryOpen события формы было все ОК!
Но он не доработан!
Я не соображу как блокировать поля и вообще возможна ли это!

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

Код:
	Dim session As New NotesSession
Dim db As NotesDatabase
Dim acl As NotesACL
Dim entry As NotesACLEntry
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument

Set db = session.CurrentDatabase
Set acl = db.ACL
userNames = session.UserName
Set entry = acl.GetEntry( userNames )

fieldName(0)="SurName"	' пример
fieldName(1)="Name"
fieldName(2)="FatherName"

bool = False

If(Ubound(entry.Roles)>0)Then
Forall r In entry.Roles
If(r="[ALL]" Or r="[ABIT]")Then
bool = True
Exit Forall
End If
End Forall
End If

If(bool = False)Then
Messagebox "Вы не имеете прав на редактирование некоторых полей!"
[b][color=#FF0000]Вот в этом месте сделать чтонибудь надо, типа[/color][/b]

for i=lbound(fieldName) to ubound(fieldName)
fieldName(i).locked
next

End If
 
M

medin84

Спасибо вроде понял!
Вы уж простите, малость неопытен!
:)
 
Мы в соцсетях:

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