...

Ограничение видимости полей по группе в приложении.

Тема в разделе "Примеры сценариев", создана пользователем daniyar1997, 17 июн 2022.

  1. daniyar1997

    daniyar1997 Участник

    Исходные данные: группа (внутри раздела)
    [​IMG]
    Задача: ограничить доступ к полям приложения для пользователей, относящихся к данной группе.
    [​IMG]
    Сложность в том, что скрипт должен учитывать помимо пользователей, еще и оргструктуры и группы, в которые входит пользователь.
    Реализация:
    1. Создаем переменную типа да/нет в контексте формы
    [​IMG] 2. Привязываем переменную к скрываемым полям
    [​IMG]
    3. Вставляем клиентский скрипт на событие onInit()
    Код:
    
    async function onInit() { //Отображение статуса - при открытии карточки
    //background-color: #EDF8FB

        
    Context.data.status_kartochki Context.data.__status!.name;
        
    await hideSecuredFields();

    }

    //Скрытие защищенных полей
    async function hideSecuredFields(): Promise<void> {

        
    ViewContext.data.ishidden false;

        
    //Текущий пользователь
        
    let currentUser await System.users.getCurrentUser();

        if (
    currentUser == undefined) return;

        
    let userGroupIds currentUser.data.groupIds//список id групп пользователей
        
    let userOsIds currentUser.data.osIds//список id оргструктур
        
    let currentUserId currentUser.data.__id//id текущего пользователя

        //Поиск ограниченной группы
        
    let foundedDeniedGroup await System.userGroups.search()
        .
    where(=> f.__name.eq('Ограниченный доступ к CRM') )
        .
    all();

        
    //Выделение ограниченной группы
        
    let deniedGroup;
        for (
    let elem of foundedDeniedGroup) {
            if (
    elem != undefined) {
                
    deniedGroup elem;
                break;
            }
        }
        if (
    deniedGroup == undefined) return;

        
    let deniedGroupMemberIds await deniedGroup.data.subOrgunitIds//список id участников ограниченной группы

        
    if (deniedGroupMemberIds == undefined) return;

        
    //Проверка что пользователь является участником ограниченной группы
        
    for (let groupMemberId of deniedGroupMemberIds!) {

            if (
    userGroupIds != undefined) {

                for (
    let userGroup of userGroupIds!) { //Проверка групп пользователя

                    
    if ( (await userGroup.fetch()) != undefined) {
                        if (
    groupMemberId == (await userGroup.fetch()).data.__id) {
                            
    ViewContext.data.ishidden true;
                            break;
                        }
                    }
                  
                 }

            }

            if (
    userOsIds != undefined) {

                for (
    let orgStructure of userOsIds!) { //Проверка оргструктур

                    
    if ((await orgStructure.fetch()) != undefined) {
                        if (
    groupMemberId == (await orgStructure.fetch()).data.__id) {
                            
    ViewContext.data.ishidden true;
                            break;
                        }
                    }
                  
                }

            }

            if (
    currentUserId == groupMemberId) { //Проверка id пользователя

                    
    ViewContext.data.ishidden true;
                    break;

            }

        }

    }
    4. Дополнительно, необходимо ограничить пользователям доступ к разделу CRM (в нашем случае).
    Иначе, пользователи смогут увидеть скрытые поля на канбан-доске.
    [​IMG]
    Результат: определенные пользователи не могут зайти в CRM, но могут переходить на карточки по ссылке из сообщений.
    При этом поля с коммерческой информацией для них будут скрыты.
    Примечания:
    1. Очень важно делать проверки на undefined. Иногда при fetch запросах проскакивают undefined значения (обычно из-за того, что в системе реализутеся только легкое удаление элементов). И обращение undefined.data приводит к крашу скрипта;
    2. Оргструктуры: в участники группы можно добавлять только элементы оргструктуры с иконкой человечка. Данный код не проверяет отделы.
    [​IMG]

    Вложения:

    • 1.png
      1.png
      Размер файла:
      198,6 КБ
      Просмотров:
      4
    Последнее редактирование: 17 июн 2022
  2. daniyar1997

    daniyar1997 Участник

    Внесены изменения в код