Скрыть на странице функциональность без права доступа

Средний
PDF

Пример. На странице записи пользовательского раздела Rights Service скрыть кнопку Импорт данных из Excel (Excel data import), если пользователь не имеет прав на импорт данных из Excel.

1. Настроить интерфейс страницы 

  1. Используя шаблон Данные и бизнес-процессы (Records & business processes), создайте пользовательское приложение Rights Service. Для этого воспользуйтесь инструкцией, которая приведена в статье Создать пользовательское приложение.
  2. В рабочей области страницы приложения Rights Service откройте страницу Страница записи Rights Service (Rights Service form page).
  3. Удалите поле Название (Name), которое по умолчанию добавлено на страницу Страница записи Rights Service (Rights Service form page).
  4. Добавьте кнопку, которая запускает импорт данных из Excel.

    1. На панель инструментов Freedom UI дизайнера добавьте компонент типа Кнопка (Button).
    2. На панели действий Freedom UI дизайнера нажмите на кнопку и на панели настройки заполните свойства кнопки:

      • Заголовок (Title) — "Импорт данных из Excel" ("Excel data import").
      • Стиль (Style) — выберите "Основной" ("Primary").
  5. На панели действий Freedom UI дизайнера нажмите на кнопку . После сохранения настроек страницы открывается исходный код страницы Freedom UI.

2. Настроить скрытие функциональности без права доступа 

Бизнес-логика настраивается в дизайнере клиентского модуля. В этом примере настроим скрытие функциональности без права доступа.

  1. Подключите сервис проверки прав доступа sdk.RightsService. Для этого добавьте в AMD-модуль зависимость @creatio/sdk.

    Зависимости AMD-модуля
    /* Объявление AMD-модуля. */
    define("UsrAppRightsService_FormPage", /**SCHEMA_DEPS*/["@creatio/sdk"] /**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {
            ...
        };
    });
    
  2. В секцию viewModelConfig добавьте атрибут CanImportFromExcel, который хранит информацию о правах доступа пользователя.

    Секция viewModelConfig
    viewModelConfig: /**SCHEMA_VIEW_MODEL_CONFIG*/{
        "attributes": {
            ...,
            /* Атрибут, который хранит информацию о правах доступа пользователя. */
            "CanImportFromExcel": {}
        }
    }/**SCHEMA_VIEW_MODEL_CONFIG*/,
    
  3. В секции viewConfigDiff привяжите свойство visible элемента ExcelDataImportButton к атрибуту CanImportFromExcel модели. Свойство visible определяет видимость кнопки.

    Секция viewConfigDiff
    viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
        {
            "operation": "insert",
            "name": "ExcelDataImportButton",
            "values": {
                ...,
                /* Свойство, которое определяет видимость кнопки. Привязано к значению атрибута CanImportFromExcel. */
                "visible": "$CanImportFromExcel"
            },
            ...
        }
    ]/**SCHEMA_VIEW_CONFIG_DIFF*/,
    
  4. В секции handlers добавьте пользовательскую реализацию обработчика системного запроса crt.HandlerViewModelInitRequest. Обработчик выполняется при инициализации View модели.

    1. Создайте экземпляр сервиса проверки прав доступа из @creatio/sdk.
    2. Получите информацию о наличии прав доступа на системную операцию CanImportFromExcel для пользователя.
    3. Запишите результат в атрибут CanImportFromExcel.
    Секция handlers
    handlers: /**SCHEMA_HANDLERS*/[
        {
            request: "crt.HandleViewModelInitRequest",
            /* Пользовательская реализация обработчика системного запроса. */
            handler: async (request, next) => {
                /* Создает экземпляр сервиса проверки прав доступа из @creatio/sdk. */
                const rightService = new sdk.RightsService();
                /* Получает информацию о наличии прав доступа на системную операцию CanImportFromExcel для пользователя. */
                const canImportFromExcel = await rightService.getCanExecuteOperation('CanImportFromExcel');
                /* Записывает результат в атрибут CanImportFromExcel. */
                request.$context.CanImportFromExcel = canImportFromExcel;
                /* Вызывает следующий обработчик, если такой есть, и возвращаем его результат. */
                return next?.handle(request);
            },
        }
    ] /**SCHEMA_HANDLERS*/,
    
    Полный исходный код схемы страницы
  5. На панели инструментов дизайнера клиентского модуля нажмите Сохранить (Save).

Результат выполнения примера 

Чтобы посмотреть результат выполнения примера с отсутствующими правами доступа:

  1. Войдите в приложение под пользователем, у которого нет прав на импорт данных из Excel, например, добавив нового или отобрав права у существующего пользователя. Для добавления пользователя воспользуйтесь инструкцией, которая приведена в статье Добавить пользователей. Для настройки прав доступа воспользуйтесь инструкцией, которая приведена в статье Настроить права доступа на системные операции. За импорт данных из Excel отвечает системная операция Импорт из Excel (Excel import, код CanImportFromExcel).
  2. Перейдите на страницу приложения Rights Service и нажмите Запустить приложение (Run app).
  3. На панели инструментов приложения Rights Service нажмите Добавить (New).

В результате выполнения примера на странице приложения Rights Service скрыта кнопка Импорт данных из Excel (Excel data import), которая запускает импорт данных из Excel.

Чтобы посмотреть результат выполнения примера с наличием прав доступа:

  1. Обновите страницу приложения Rights Service.
  2. На панели инструментов приложения Rights Service нажмите Добавить (New).

В результате выполнения примера на странице приложения Rights Service отображается кнопка Импорт данных из Excel (Excel data import), которая запускает импорт данных из Excel.