Статья Андрея Бобкова о настройке прав доступа в Аксапте 3.0.
Андрей Бобков, a-bobkov@inbox.ru
Настройка прав доступа в Аксапте 3.0
Главная цель данной статьи – помочь администратору понять функциональность настройки прав доступа к данным и функциям системы Microsoft Axapta 3.0 (далее Аксапта, тестирование проводилось на SP 2 RU), место этой функциональности среди других средств Аксапты. Также предполагалось осветить, какие трудности встречаются при настройке прав доступа и как их можно обойти.
Так как базовые понятия системы Аксапта в данной статье не определяются, рекомендуется читать ее после руководства администратора (файл Администрирование 3.0.pdf стандартной поставки Аксапты).
Загрузить
axapta30_security_setup.doc (503Kb, Для загрузки требуется регистрация на форуме у Mazzy)
Содержание
- Задачи, решаемые с помощью настройки прав доступа
- Ограничения средств настройки прав доступа
- Настройка прав доступа в Аксапте
- Советы по настройке прав доступа
- Рекомендуемые материалы
1. Задачи, решаемые с помощью настройки прав доступа
Настройка прав доступа в системе Аксапта позволяет ограничить доступ пользователей:
- к функциональности (с точностью до пункта меню, а также элемента управления, см. 4.5);
- к данным (с точностью до поля таблицы и метода данных).
Ограничение доступа к функциональности дает возможность «функционального» подхода к настройке прав доступа. Администратор, следуя этому подходу, должен решить, какие функции (формы, отчеты, кнопки) может использовать пользователь. «Функциональный» подход к настройке прав доступа основан на простом принципе «если у пользователя нет доступа к соответствующей кнопке, то он не сможет ничего испортить». Имеет смысл всегда начинать настройку прав доступа с «функционального» подхода, так как он позволяет значительно упростить пользовательский интерфейс за счет уменьшения количества форм, отчетов, к которым пользователь имеет доступ.
Ограничение доступа к данным дает возможность «информационного» подхода к настройке прав доступа. Администратор, следуя этому подходу, должен решить, какой уровень доступа установить пользователю для каждой таблицы (с точностью до поля и метода данных). Этот подход, по сравнению с «функциональным», требует больших затрат времени, а также требует от администратора знания таблиц Аксапты, но позволяет обеспечить более надежную защиту данных от действий пользователя. Имеет смысл применять «информационный» подход, если требуется надежно защитить какую-то важную, конфиденциальную информацию, например, данные по зарплате. Также этот подход применяется тогда, когда несколько пользователей должны работать с одной и той же функциональностью (формами, отчетами), но с разными правами на доступ к данным в этой форме.
Можно сказать, что «функциональный» подход является средством более высокого уровня, обеспечивает более быструю и понятную, но «грубую» настройку прав доступа. «Информационный» подход является средством более низкого уровня, обеспечивает более «тонкую» настройку прав доступа, но требует больше знаний и трудозатрат.
2. Ограничения средств настройки прав доступа
Настройка прав доступа в Аксапте производится для элементов приложения для группы пользователей в домене (группе компаний). Это означает следующее:
- Если требуется какая-то особая настройка прав доступа только для одного пользователя, то для него придется создать персональную группу. Это усложнит администрирование системы (ведь реально работающие системы и без того содержат десятки групп пользователей), поэтому в этом случае лучше рассмотреть функциональность Пользовательские настройки, которая позволяет управлять видимостью и редактируемостью полей на форме персонально для пользователя. И только если этой функциональности не достаточно, нужно создавать специальную группу пользователей и настраивать для нее права доступа.
- Если требуется какая-то настройка прав доступа для всех пользователей сразу (вертикальные фильтры), то ее придется повторить для каждой группы пользователей. Это требуется из-за того, что в Аксапте отсутствует возможность «наследования» прав доступа от другой группы пользователей. Если бы такая возможность была, то можно было бы настроить одну группу пользователей, а для остальных указать, что они должны наследовать права доступа от нее. Пока такой возможности нет, и поэтому зачастую приходится повторять настройку прав доступа многократно, что увеличивает трудоемкость этой работы. Поэтому, если требуется какая-то настройка прав доступа для всех пользователей сразу, лучше попробовать модифицировать элементы приложения, к тому же, это надежнее. Если модифицировать элементы приложения не получилось – можно создать общую группу пользователей, включив в нее всех (см. 4.1).
- Если некоторый интерфейсный элемент создается программно (например, поле диалоговой формы) ограничить права доступа к нему можно только программно, например проверяя при вводе данных принадлежность пользователя определенной группе, запрашивая у пользователя пароль и т.д.
- Если необходимо ограничить доступ пользователей на уровне отдельных записей таблиц (горизонтальные фильтры), то это производится с помощью функциональности RLS (Record Level Security), в данной статье не рассматриваемой (см. 5.2).
3. Настройка прав доступа в Аксапте
Настройка прав доступа в Аксапте производится в форме Права групп пользователей (Администрирование- Настройки- Контроль доступа- Права групп пользователей). Эта форма состоит из двух закладок. На закладке Обзор необходимо выбрать одну группу пользователей, домен и перейти на закладку Права доступа. Настраивать права для нескольких групп пользователей сразу, путем выбора нескольких строк на закладке Обзор, нельзя!

Рисунок 1. Вызов формы Права групп пользователей.
3.1. Дерево элементов приложения
На закладке Права доступа в правом окне отображается дерево элементов приложения (таблиц, пунктов меню), выбранных и сгруппированных в зависимости от значения поля Просмотр . Параметр Просмотр может принимать следующие значения:
- «Контроль доступа» – отображается дерево, состоящее из ключей доступа. На верхнем уровне выводятся главные ключи доступа (с пустым свойством Parent). Далее в дереве выводятся подчиненные им ключи доступа1. В иерархии ключей доступа может быть несколько уровней. Под каждым терминальным ключом выводится список элементов приложения, у которых в свойстве SecurityKey указан этот ключ доступа2.3

Рисунок 2. Список элементов приложения в разрезе ключей доступа,
подчиненных ключу «СНГ Основные средства».
Слева от элемента приложения, в квадратике, отображается знак настройки прав доступа: При уровне «Нет доступа» выводится пустой квадратик, при уровне «Полный доступ» выводится галка на белом фоне, при остальных значениях – галка на сером фоне.
Слева от ключа, в квадратике, отображается знак настройки прав доступа для подчиненных ключей (элементов приложения, для терминальных ключей): если сам ключ и все подчиненные ключи (элементы) имеют уровень «Нет доступа», то выводится пустой квадратик, если сам ключ и все подчиненные имеют уровень «Полный доступ» – галка на белом фоне, в остальных случаях – галка на сером фоне.
Таким образом, галка на сером фоне слева от ключа доступа служит для привлечения внимания администратора, так как обозначает, что прав доступа для подчиненных элементов настроены нетривиально.
- «Контроль доступа (вкл. веб)» – отображается дерево, состоящее из ключей доступа, такое же как в «Контроль доступа», дополнительно выводятся элементы приложения следующих типов: Web Page, Web Form, Web Report.
- «Специфика страны» – отображается дерево, состоящее из региональных конфигурационных ключей. В иерархии конфигурационных ключей может быть несколько уровней. Далее в дереве выводится список элементов приложения, у которых в свойстве CountryConfigurationKey установлен соответствующий конфигурационный ключ. С помощью этой функциональности можно настраивать уровень доступа пользователей к тем пунктам меню, у которых свойство SecurityKey пустое, и следовательно, они не выводятся в дереве «Контроль доступа».
- Названия меню (выводятся все меню, которые не входят в другие меню) – отображается дерево, состоящее из веток меню. Далее в дереве выводится список элементов приложения, содержащихся в выбранном меню. Жирным шрифтом выделены те ветки меню и элементы, которые будет видеть пользователь (установлен уровень доступа выше «Нет доступа»).

Рисунок 3. Список элементов приложения в разрезе меню «Главное меню».
В отличие от остальных вариантов дерева, в дереве из меню выводятся только те ветки и элементы, которые видит сам администратор, настраивающий права пользователей (установлен уровень выше «Нет доступа»). Таким образом, с помощью этой функциональности, администратор не может настроить уровень доступа пользователя к элементам, на которые у него самого нет доступа.
С помощью этого дерева можно настраивать уровень доступа пользователей к пунктам меню, у которых свойство SecurityKey пустое, и следовательно, они не выводятся в дереве «Контроль доступа». В частности, в списке меню есть такие меню как Инструменты, в которых можно настроить доступ пользователей к служебным элементам функциональности, например Автоотчет, Системная дата.
- Названия Web-меню – отображается дерево, состоящее из меню. Далее в дереве выводится список элементов приложения, содержащихся в выбранном меню, в том числе Web-элементов.
3.2. Содержание элементов приложения в дереве
Некоторые элементы приложения в дереве можно раскрыть4:
- Если элемент является пунктом меню типа «форма» (свойство Class равно «Form»), и для него установлен уровень доступа отличный от «Нет доступа», то далее в дереве выводятся все подчиненные форме элементы – таблицы, подключенные к форме в качестве источников данных, начиная с главного источника5, затем все пункты меню, выведенные на форму, вместе с содержащими их меню, а также кнопки.

Рисунок 4. Раскрытая форма Основные средства.
Таким образом, список подчиненных элементов соответствует функциональности, которая может быть использована из формы. В таблицах, подключенных к форме в качестве источников данных, наряду с полями выводятся методы данных. Несмотря на то, что метод данных в АОТ обычно определяется для таблицы, настройка прав для метода данных производится для каждой формы, в которой он выводится и относится только к этой форме! Если требуется ограничить доступ к некоторому методу данных во всех формах, то придется найти все места во всех формах, где он выводится, вручную или с помощью перекрестных ссылок.

Рисунок 5. Дисплейные методы Занято в раскрытом источнике данных Штатное расписание.
- Если элемент является пунктом меню типа «отчет» (свойство Class равно «Report»), в качестве источника данных для отчета используется запрос и для пункта меню установлен уровень доступа отличный от «Нет доступа», то далее в дереве выводятся все таблицы, подключенные к запросу в качестве источников данных.
- Если элемент является таблицей, то далее в дереве выводятся все ее поля и группы полей. Методы данных таблицы здесь не выводятся! В отличие от методов данных, настройка прав доступа для поля таблицы – единая для всего дерева элементов. Если изменить уровень доступа для поля таблицы, он будет автоматически установлен для всех форм, где бы это поле ни выводилось!
Таким образом, каждый элемент приложения может быть выведен в дереве элементов многократно, в соответствии с тем, как он используется, возможна даже рекурсия. Достаточно установить уровень доступа для любого элемента (кроме методов данных) только в одном месте, в остальных местах дерева этот уровень отобразится автоматически.
3.3. Описание элемента приложения
Выбрав один элемент в дереве, в окне слева от дерева можно прочитать информацию о его назначении. Выше черты выводится название и описание элемента. Ниже черты выводится полезная информация:
- «Тип» – тип выбранного элемента, одно из значений:
- «Ключ контроля доступа» - Ключ доступа (Security Key)
- «Отображение пунктов меню» - MenuItem типа Display, вызывает Форму
- «Пункт меню типа Output » - MenuItem типа Output, вызывает Отчет
- «Действие по пункту меню» - MenuItem типа Action, вызывает Класс, запрос
- «Клавиша из» - Кнопка формы
- «Таблица» - Таблица
- «Поле» - Поле таблицы
- «Группа полей» - Группа полей таблицы
- «Метод дисплея» - Дисплейный метод
- «Метод редактирования» - Метод редактирования

Рисунок 6. Ключ доступа СНГ Кадровый учет с установленным уровнем Полный доступ.
- «Уровень максимального доступа» – максимально возможный уровень прав, который может быть установлен для выбранного элемента. Для таблицы этот уровень задан ее свойством MaxAccessMode. Обычно уровень бывает ограничен для таблиц транзакций.

Рисунок 7. Для таблицы Аттестация задан уровень «Полный доступ».
- «Уровень максимального доступа» – минимальный уровень прав, который должен быть установлен для выбранного элемента пункта меню или кнопки, чтобы он функционировал. Для пункта меню этот уровень задан его свойством NeededAccessLevel .

Рисунок 8. Для формы Штатное расписание задан минимальный уровень «Просмотр».
- «Название» – идентификатор элемента приложения. Для поля перед точкой выводится также название таблицы, которой оно принадлежит.

Рисунок 9. Информация для поля Дата аттестации.
- «Ключи контроля доступа» – перечислены все ключи доступа, установленные для интерфейсных элементов формы, которыми регулируется доступ к выбранному интерфейсного элементу (см. 4.5). Эта информация выводится только для кнопок и пунктов меню, выведенных на форму. Для остальных интерфейсных элементов такая информации не выводится.

Рисунок 10. Уровень доступа для кнопки Вверх регулируется ключом «Admin».
3.4. Уровни доступа
Выбрав элемент приложения в дереве, можно установить для него нужное значение уровня доступа, с помощью переключателя правее дерева элементов. Переключатель всегда содержит пять значений: «Нет доступа», «Просмотр», «Правка», «Создание», «Полный доступ», но они не всегда доступны и их смысл зависит от типа выбранного элемента. Смысл доступных значений в зависимости от выбранного элемента приведен в Таблица 1.
| Тип элемента | Значения уровня доступа | ||||
| Нет доступа | Просмотр | Правка | Создание | Полный доступ | |
Форма6 |
Пункт меню не отображается |
Форма открывается только для просмотра |
Можно редактировать записи в форме7 |
Можно редактировать и создавать записи в форме |
Можно редактировать, создавать и удалять записи в форме |
Отчет |
Пункт меню не отображается |
Отчет запускается |
--- |
--- |
--- |
Класс, запрос |
Пункт меню не отображается |
Функция запускается |
Функция запускается |
Функция запускается |
Функция запускается |
Кнопка |
Кнопка не отображается |
Кнопка работает |
Кнопка работает |
Кнопка работает |
Кнопка работает |
Таблица |
Таблица не отображается |
Таблица только отображается |
Можно редактировать записи в таблице |
Можно редактировать и создавать записи в таблице |
Можно редактировать, создавать и удалять записи в таблице |
Поле |
Поле не отображается |
Поле только отображается |
Поле редактируется |
--- |
--- |
Диплейный метод |
Поле не отображается |
Поле отображается |
--- |
--- |
--- |
Метод редактирования |
Поле не отображается |
Поле только отображается |
Поле редактируется |
--- |
--- |
Если установлены различные уровни доступа для формы и ее источника данных, то при входе пользователя в систему, уровень доступа для источника данных присваивается минимальному из них.
Уровень доступа для таблицы ограничен сверху максимально возможным уровнем (указан в свойстве таблицы MaxAccessMode).
Уровень доступа для поля ограничен значением уровня доступа для его таблицы. То есть, если для таблицы установлен уровень «Просмотр», то для ее полей остаются доступными только значения «Нет доступа» и «Просмотр». Если для таблицы установлен уровень «Нет доступа», то для ее полей остается доступным только значение «Нет доступа».
Уровень доступа для поля дополнительно ограничен сверху свойствами Visible и AllowEdit. Если для поля свойство Visible установлено «No», то поле даже не показывается в дереве элементов. Если для поля свойство AllowEdit установлено «No», то доступ к полю будет разрешен только на чтение8.

Рисунок 11. Свойства поля Должность.
Правила присвоения уровня доступа для элемента приложения при входе пользователя в систему более формально описаны в руководстве разработчика (см. 5.1).
Уровень доступа для ключа доступа используется для удобства настройки прав доступа, а также для определения уровня доступа для отдельных элементов форм, отчетов, меню (см. 4.5), поэтому в таблице выше не отражен.
Уровень доступа для группы полей не используется при работе пользователя с системой, а служит исключительно для удобства настройки прав доступа к полям, поэтому в таблице выше не отражен.
3.5. Установка уровня доступа для элемента приложения
Значение уровня доступа можно установить для каждого элемента отдельно, выбрав элемент и установив значение переключателя Доступ. Если этого не сделать, значение уровня доступа будет установлено по значению ключа доступа, которому подчинен элемент. Значение, установленное отдельно для элемента, всегда перекрывает значение уровня для любого вышестоящего элемента в дереве. Например, если для таблицы в какой-то ветке дерева вы видите значение уровня доступа «Правка», значит при работе с этой таблицей пользователь будет иметь права именно этого уровня, несмотря на то, что вышестоящие в дереве формы, ключи доступа имеют другие значения уровня доступа.

Рисунок 12. При работе пользователя, форме Основные средства будет присвоен уровень «Полный доступ».
Можно выбрать элемент правой кнопкой мыши и указать значение уровня доступа из появившегося локального меню.
Можно выбрать в дереве сразу несколько элементов и указать для них значение уровня доступа. При этом, указанное значение будет установлено сразу для всех выбранных элементов.

Рисунок 13 . Выбраны две формы с различными уровнями доступа.
При установке значения уровня доступа для выбранного элемента, указанное значение автоматически устанавливается рекурсивно вглубь дерева, в зависимости от типа элемента:
- При установке значения уровня доступа для выбранного ключа доступа, указанное значение автоматически применяется рекурсивно вглубь дерева на все элементы, подчиненные выбранному ключу, только если для элемента значение уровня доступа не устанавливалось отдельно9. Если значение уровня доступа для подчиненного элемента устанавливалось отдельно10, то при изменении значения уровня доступа на ключ, значение уровня доступа для подчиненного элемента останется прежним. Если элемент не подчинен данному ключу (например, когда таблица выводится под формой как источник данных), значение уровня доступа для него остается прежним в любом случае.
- При установке значения уровня доступа для выбранной формы выше «Нет доступа», указанное значение автоматически устанавливается на все кнопки, если они есть на данной форме. Уровень доступа для всех остальных элементов остается неизмененным.
- При установке значения уровня доступа для выбранной таблицы, указанное значение автоматически устанавливается для всех ее полей, а также на методы данных, если таблица выводится в качестве источника данных для формы.
- При установке значения уровня доступа для выбранной группы полей, которая выводится в списке вместе с полями таблицы, значение уровня доступа устанавливается для всех полей данной группы. Для самой группы выбранное значение не сохраняется и, таким образом, служит только для удобства настройки уровня доступа для полей.
При нажатии кнопки Каскад, значение уровня доступа, указанное для выбранного элемента устанавливается рекурсивно на все нижележащие элементы дерева и для всех этих элементов устанавливается признак, что уровень доступа был установлен отдельно.11
При нажатии кнопки Полное отключение доступа происходит установка уровня «Нет доступа» для всех ключей доступа и подчиненных им элементов. Однако, для всех элементов, не подчиненных ключам доступа, устанавливается уровень «Полный доступ». Также, при этом сбрасывается признак отдельной установки прав доступа для всех ключей и элементов.
При нажатии кнопки Установка полного доступа происходит установка уровня «Полный доступ» для всех ключей доступа и подчиненных им элементов, а также для всех элементов, не подчиненных ключам доступа. Также, при этом сбрасывается признак отдельной установки прав доступа для всех ключей и элементов.
3.6. Экспорт, импорт и печать прав доступа
Права выбранной группы пользователей могут быть выгружены в двоичный файл с помощью кнопки Экспорт, и загружены, для той же или любой другой группы пользователей, с помощью кнопки Импорт12.
Выгрузить все права для групп пользователей можно, скорее всего, только с помощью группы определений, которую можно настроить в форме Группы определений (Администрирование- Периодические операции- Экспорт/Импорт данных-Группы определений). Буду очень благодарен каждому, кто пришлет мне список таблиц, которые необходимо и достаточно включить в эту группу определений!
Права выбранной группы пользователей могут быть распечатаны с помощью кнопки Печать. Алгоритм печати различный, в зависимости от значения параметра Просмотр:
- При значении «Контроль доступа», печатаются значения уровня доступа для всех главных ключей доступа. Для всех ключей доступа, имеющие на форме дерева элементов знак «галка на сером фоне» (см. 3.1), выводятся подчиненные ключи доступа (элементы для терминальных ключей).
- При значении Названия меню , печатаются значения уровня доступа для всех главных веток меню. Подчиненные ветки меню и элементы приложения выводятся по тому же принципу, что и подчиненные ключи доступа и элементы при печати дерева «Контроль доступа».
Распечатать права доступа выборочно или для нескольких групп пользователей нельзя!
4. Советы по настройке прав доступа
4.1. Алгоритм настройки прав доступа администратором
Удобно настраивать права для отдельной группы пользователей методом «от полного запрета»:
- Сбросить все права с помощью кнопки «Полное отключение доступа»;
- Затем включить уровень «Просмотр» для тех форм, кнопок, таблиц, которые пользователь должен видеть/ запускать;
- Затем включить уровень «Правка» для тех таблиц, полей, которые пользователь должен редактировать;
- Далее включить уровень «Создание» для тех таблиц, в которых пользователь должен создавать записи;
- И, наконец, дать «Полный доступ» к тем таблицам, в которых пользователь должен иметь возможность удалять записи.
В силу отсутствия в системе Axapta возможности наследования прав доступа, удобно применять следующий общий алгоритм настройки:
- Настроить права, общие для всех пользователей (кроме установки «Нет доступа» для методов данных, так как эта установка портится при экспорте/импорте, см. 3.6);
- Выгрузить права во внешний файл с помощью кнопки Экспорт (см. 3.6);
- Загрузить права из сформированного внешнего файла во все группы пользователей с помощью кнопки Импорт (см. 3.6);
- Дополнительно настроить права для каждой группы пользователей отдельно.
Возможен и другой подход к настройке – вдобавок к обычным группам пользователей, в той же форме Группы пользователей (Администрирование- Настройки- Группы пользователей) создать базовые группы пользователей. Например, см. Рисунок 14, вдобавок к группам «ОК приказы», «ОК справочники», «ОТ приказы», «ОТ справочники», создать базовые группы «Отдел кадров», «Отдел труда», «Расчеты с персоналом». Критерием выделения таких групп будет наличие достаточного множества одинаковых настроек прав доступа в группах пользователей. Эти одинаковые настройки и нужно вынести в базовые группы пользователей, удалив при этом из обычных групп. Например, для всех пользователей «Расчеты с персоналом» необходим доступ (хотя бы для просмотра) к справочникам сотрудников, адресов, штатному расписанию, другим кадровым справочникам. Очевидно, все пользователи должны помещаться кроме своей группы еще и в базовые группы.

Рисунок 14. Иерархия групп пользователей «Расчеты с персоналом».
Такой подход обеспечит более простую и надежную перенастройку прав доступа, в случае необходимости. Например, чтобы дать всем пользователям доступ к новому кадровому справочнику «Участки», достаточно дать на него доступ базовой группе «Расчеты с персоналом». Но зато, при каждой операции в справочнике пользователей, например при вводе нового пользователя или при замещении одного пользователя другим, необходимо отслеживать, чтобы пользователь был внесен в нужные базовые группы и только в них, что повышает сложность администрирования пользователей.
4.2. Поиск нужной формы в дереве элементов
При настройке прав доступа часто возникает вопрос, где же в дереве элементов находится нужная форма. Поиск методом перебора отнимает много времени, и при том может не увенчаться успехом. Попробуйте, например, найти в дереве элементов форму RHRMEmplTable – это Карточка сотрудника из модуля Расчеты с персоналом. Потратив массу времени, вы не найдете ее, потому что ее там нет!
Для получения ответа на вопрос, где же в дереве элементов находится нужная форма и есть ли она там вообще можно применить два средства:
- Перекрестные ссылки. Это «штатное» средство, специально предназначенное для решения таких задач. Правда, получить с его помощью список пунктов меню, вызывающих искомую форму, у меня не получилось. К счастью, есть другой способ:
- Поиск в файле экспорта. Нужно выгрузить все пункты меню в файл экспорта (*.xpo), открыть его любым текстовым редактором и найти в нем все вхождения подстроки вида «#имя формы» (без кавычек). Найденные вхождения должны иметь вид:
Name #RHRMStaffList идентификатор пункта меню Label #@DIS14469 HelpText #@DIS14473 Class #Form вызываемый объект – форма Object #RHRMStaffList идентификатор вызываемой формы … CountryConfigurationkey #CSECIS ключ в «Специфика страны» … SecurityKey #RHRMDaily ключ в «Контроль доступа»
Это и есть описание искомого пункта меню.
Примечание: Для поиска объектов с заданными свойствами можно использовать также Поиск в АОТ (см. Как искать значение свойства объекта AOT?)
4.3. Скрытие заголовков групп полей
Когда нужно скрыть от группы пользователей ряд полей, бывает так, что сами поля скрываются, а заголовки групп полей, пустые гриды, закладки, дисплейные методы на форме остаются. Для того чтобы этого не происходило, помогает соблюдение следующих правил при создании формы:
- Каждое поле на форме должно содержаться либо в гриде, либо в группе полей.
- Для грида или группы полей, в которых содержатся скрываемые поля, должно быть установлено свойство DataGroup .

Рисунок 15. Установка свойства DataGroup для выбранной группы полей на форме.
4.4. Настройка прав доступа для форм, вызываемых программно
Некоторые формы приложения вызываются исключительно программно. Например, форма RHRMEmplTable вызывается программно при запуске пункта меню Расчеты с персоналом- Карточка сотрудника). Поскольку в приложении нет даже пункта меню, вызывающего форму непосредственно, то форма не выводится ни в одном из вариантов дерева настройки прав доступа. Соответственно, невозможно настроить доступ к дисплейным методам, выводимым на этой форме. Единственный выход из положения виден в создании отдельного пункта меню, вызывающего требуемую форму непосредственно, с указанием в свойстве SecurityKey терминального ключа доступа. В этом случае, форма появится в дереве элементов13.
4.5. Настройка прав доступа для отдельного интерфейсного элемента
Существует возможность ограничить права доступа пользователя для отдельного интерфейсного элемента формы, поля отчета, ветки меню в зависимости от значения какого-либо ключа доступа.
Это необходимо, например, если элемент формы не связан ни с каким полем или методом данных, а просто выполняет какое-то действие при изменении данных в нем.
Для этого необходимо установить для данного элемента свойство SecurityKey равным нужному ключу доступа14. При входе пользователя в систему, уровень доступа для данного элемента будет присвоен равным уровню данного ключа доступа, установленному при настройке прав доступа (см. 3.4)15. Свойство SecurityKey определено для всех элементов, входящих в дизайн формы, а также для полей отчета, всех веток меню.

Рисунок 16. Установленный ключ доступа MorphX для кнопки Правка формы Пользовательские настройки.
Для некоторых элементов, можно дополнительно установить свойство NeededAccessLevel равным «порогу видимости». Если, при входе пользователя в систему, уровень доступа для ключа, указанного в свойстве SecurityKey, окажется меньше установленного «порога видимости», то элемент не будет выведен на форме совсем. Свойство NeededAccessLevel определено только для следующих элементов управления формы: Tab, TabPage, Group, ButtonGroup, MenuButton, MenuItemButton, CommandButton, а также для всех веток меню16.

Рисунок 17. Установка ключа доступа Admin для всей закладки Выходная форма
формы Пользовательские настройки.
Например, с помощью этих свойств можно запретить доступ пользователя к форме Пользовательские настройки. Если у пользователя для ключа «Admin» нет уровня доступа хотя бы «Просмотр», то выбрав Настройка в контекстном меню формы, он увидит Рисунок 18.
![]()
Рисунок 18. Открытая форма Пользовательские настройки,
если уровень доступа для ключа Admin равен «Нет доступа».
Единственное неудобство – пользователю легко забыть закрыть эту форму, так как она очень маленькая, ее можно просто не заметить. А не закрыв форму Пользовательские настройки, невозможно закрыть форму, из которой она была вызвана.
5. Рекомендуемые материалы
5.1. Вычисление прав доступа для элементов приложения
В руководстве разработчика правам доступа посвящены следующие разделы:
- Setting up security keys
- Table and field access
- Menu item access
5.2. Другие средства ограничения доступа
Как настроить RLS в Аксапте 3.0
Комментарии:
[1] Раскрыть ветку дерева на один уровень можно, нажав мышкой на «+» или выделить ветку и нажать стрелку «Вправо» на клавиатуре. Чтобы раскрыть ветку дерева сразу на все уровни, нужно выделить ветку и нажать «*» на дополнительной клавиатуре. Будьте осторожны с клавишей «*», так как ветка может быть достаточно большая и открываться она будет долго!
[2] Внимание, особенность функциональности! Список элементов приложения выводится только для терминальных ключей доступа, то есть тех, у которых отсутствуют подчиненные ключи доступа.
[3] Так как права доступа для временных таблиц не настраиваются, то в списке элементов они не выводятся. Уровень доступа для временной таблицы равен уровню для ее ключа доступа.
[4] Раскрыть элемент приложения можно точно так же, как и ветку дерева.
[5] Под формой НЕ выводятся источники данных, присоединенные через InnerJoin . Если нужно ограничить права доступа для полей этих источников данных, то можно рассмотреть два варианта:
- можно ограничить права для полей, найдя таблицу в другом месте дерева элементов – в этом случае ограничение будет касаться всех форм, где выводится это поле;
- ограничить права на соответствующие элементы формы (см. 4.5) – в этом случае ограничение будет касаться только поля в данной форме.
[6] Доступность уровней доступа «Просмотр», «Правка», «Создание» для формы и класса может быть ограничена с помощью свойства NeededAccessLevel для пункта меню. Например, если NeededAccessLevel равен «Создание», то уровни «Просмотр», «Правка» для данного пункта меню будут недоступны. Однако, так как выбор между уровнями «Нет доступа» и «Полный доступ» доступен всегда, для функциональности это значения не имеет.
[7] Запись в форме можно создавать, но нельзя сохранить.
[8] Внимание, ошибка функциональности! Если для поля свойство AllowEdit установлено «No», то, несмотря на возможность установить для поля уровень доступа «Правка», фактически доступ к полю будет разрешен только на чтение.
[9] Если устанавливаемый для ключа уровень доступа ниже, чем установлен в свойстве NeededAccessLevel подчиненного пункта меню, то уровень доступа для пункте меню останется прежним. Таким образом, свойство NeededAccessLevel пункта меню определяет доступность по умолчанию формы или класса при определенном значении уровня, установленного для ключа доступа.
[10] Внимание, особенность функциональности! Как можно посмотреть, что значение уровня доступа для элемента установлено отдельно – неясно. Сбросить этот признак для элемента можно только с помощью кнопок "Полное отключение доступа" и "Установка полного доступа", что очень неудобно.
[11] Внимание, ошибка функциональности! Иногда при использовании кнопки Каскад , уровень доступа для какого-то элемента автоматически почему-то не устанавливается, пока не откроешь его хотя бы раз в дереве.
[12] Внимание, ошибка функциональности! Некорректно работает импорт прав доступа из файла (кнопка Импорт на форме Права групп пользователей ) для методов данных. При импорте прав доступа для группы пользователей, уровень прав для методов данных устанавливается максимально возможным – «Просмотр» для дисплейных методов, «Правка» для методов редактирования.
[13] Внимание, особенность функциональности! Если указать один из имеющихся в системе ключей верхнего уровня, то форма в дереве не появляется, нужно указывать только терминальный ключ.
[14] Для элемента управления не обязательно указывать терминальный ключ доступа, можно указывать любой. Удобно указывать именно главный ключ доступа, так как от него не зависят никакие элементы приложения.
[15] Если уровень доступа для поля, с которым связан данный элемент на форме, ограничен, то при работе пользователя будет установлен минимальный из них уровень доступа.
[16] Если доступ для элемента формы регулируется несколькими ключами доступа, например при установке разных ключей доступа для Tab и его TabPage , то для элемента будет установлен минимальный уровень доступа из всех влияющих на него ключей.
Андрей Бобков, a-bobkov@inbox.ru