Дублирование прав по операциям

Данный материал предназначен для продвинутых пользователей. Если у вас есть вопросы по применению, обратитесь в Техническую поддержку BPMSoft.

Симптомы

Роли All employees и All portal users имеют одинаковые права на операции с объектами. Настройки доступа к ним не работают. Изменения не сохраняются.

Решение

Чтобы удалить дубликаты прав доступа, нужно обратиться к таблице SysEntitySchemaOperationRight в базе данных. В этой таблице хранятся данные о правах на операции.

Дублирующие права для одного объекта

  1. Выполните скрипт, чтобы проверить наличие дублей прав доступа:
Скрипт для Microsoft SQL Server
SELECT Row_number() OVER(
      PARTITION BY SubjectSchemaUId, SysAdminUnitId
      ORDER BY CreatedOn --- Признак выбора дубля (например, запись, созданная позднее - дубль)
   ) AS rowN,
   *
FROM SysEntitySchemaOperationRight
WHERE SubjectSchemaUId = (
   SELECT UId
   FROM SysSchema
   WHERE ExtendParent = 0
      AND Name = 'Contact' --- Фильтрация по названию схемы, в которой дублируются права доступа
)
AND SysAdminUnitId IN (
   SELECT Id
   FROM SysAdminUnit
   WHERE Name = 'All employees'
      OR Name = 'All portal users'  --- Фильтрация по названию ролей, для которых дублируются права
)
Скрипт для PostgreSQL
SELECT Row_number() OVER(
      PARTITION BY "SubjectSchemaUId", "SysAdminUnitId"
      ORDER BY "CreatedOn" --- Признак выбора дубля (например, запись, созданная позднее - дубль)
   ) AS rowN,
   *
FROM "SysEntitySchemaOperationRight"
WHERE "SubjectSchemaUId" = (
   SELECT "UId"
   FROM "SysSchema"
   WHERE "ExtendParent" = false
      AND "Name" = 'Contact' --- Фильтрация по названию схемы, в которой дублируются права доступа
)
AND "SysAdminUnitId" IN (
   SELECT "Id"
   FROM "SysAdminUnit"
   WHERE "Name" = 'All employees'
      OR "Name" = 'All portal users'  --- Фильтрация по названию ролей, для которых дублируются права
)

Запись считается дублем, если количество вернувшихся записей rowN > 1.

  1. Выполните скрипт для удаления ролей:
Перед использованием скрипта необходимо его предварительное тестирование на резервной копии базы данных для выявления возможных побочных эффектов.
Скрипт для Microsoft SQL Server
DELETE FROM SysEntitySchemaOperationRight
WHERE Id IN (
   select Id FROM (
      SELECT Id, Row_number() OVER(
            PARTITION BY SubjectSchemaUId, SysAdminUnitId
            ORDER BY CreatedOn --- Признак выбора дубля (например, запись созданная позднее – дубль)
         ) AS rowN
      FROM SysEntitySchemaOperationRight
      WHERE SubjectSchemaUId = (
         SELECT UId
         FROM SysSchema
         WHERE ExtendParent = 0
            AND Name = 'Case'  --- Фильтрация по названию схемы, в которой дублируются права доступа
      )
      AND SysAdminUnitId IN (
         SELECT Id
         FROM SysAdminUnit
         WHERE Name = 'All employees'
            OR Name = 'All portal users'  --- Фильтрация по названию ролей (на русском), для которых дублируются права
      )
   ) as t
   where rowN > 1
)
Скрипт для PostgreSQL
DELETE FROM "SysEntitySchemaOperationRight"
WHERE "Id"::text IN (
   select "Id" from (
      SELECT "Id", Row_number() OVER(
            PARTITION BY "SubjectSchemaUId", "SysAdminUnitId"
            ORDER BY "CreatedOn" --- Признак выбора дубля (например, запись созданная позднее – дубль)
         ) AS rowN
      FROM "SysEntitySchemaOperationRight"
      WHERE "SubjectSchemaUId" = (
         SELECT "UId"
         FROM "SysSchema"
         WHERE "ExtendParent" = false
            AND "Name" = 'Case'  --- Фильтрация по названию схемы, в которой дублируются права доступа
      )
      AND "SysAdminUnitId" IN (
         SELECT "Id"
         FROM "SysAdminUnit"
         WHERE "Name" = 'All employees'
            OR "Name" = 'All portal users'  --- Фильтрация по названию ролей (на русском), для которых дублируются права
      )
   ) as t
   where rowN > 1
)

Дублирующие права для нескольких объектов

Если дубли найдены в правах сразу по нескольким объектам, можно провести поиск и удаление дубликатов сразу по всем схемам, не проверяя каждую схему отдельно:

  1. Выполните скрипт, чтобы проверить наличие дублей прав доступа по всем схемам:
Скрипт для Microsoft SQL Server и PostgreSQL
SELECT * FROM (
   SELECT Row_number() OVER(
         PARTITION BY "SubjectSchemaUId", "SysAdminUnitId"
         ORDER BY "CreatedOn" --- Признак выбора дубля (например, запись созданная позднее - дубль)
      ) AS rowN,
      *
   FROM "SysEntitySchemaOperationRight"
) AS t
WHERE rowN > 1

Результатом выборки будут записи, которые дублируются в SysEntitySchemaOperationRight.

  1. Выполните скрипт для удаления дублей:
Скрипт для Microsoft SQL Server и PostgreSQL
DELETE FROM "SysEntitySchemaOperationRight"
WHERE "Id" IN (
   SELECT "Id" FROM (
      SELECT "Id", Row_number() OVER(
            PARTITION BY "SubjectSchemaUId", "SysAdminUnitId"
            ORDER BY "CreatedOn" --- Признак выбора дубля (например, запись созданная позднее - дубль)
         ) AS rowN
      FROM "SysEntitySchemaOperationRight"
   ) AS t
   WHERE rowN > 1
)

В результате будет выполнено удаление дублей в таблице SysEntitySchemaOperationRight для всех схем и ролей.

Рекомендуем изучить

Общие принципы диагностики проблем при компиляции и поставке изменений

Материал был полезен для вас?
Вебинар: 22 апреля в 11:00
Приглашаем вас на вебинар «BPMSoft – от выбора к реальным процессам», где покажем, как компании на практике сокращают time-to-market и масштабируют бизнес с помощью решений BPMSoft.
Регистрация на мероприятие
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Оставить заявку
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Демонстрационная версия BPMSoft
Заполните заявку для получения бесплатного доступа к демонстрационному стенду на 14 дней.
Типовое внедрение
Внедрите BPMSoft CRM в свою компанию всего за 8 рабочих дней по фиксированной цене! Заполните заявку для уточнения условий.
Заказать презентацию
Наш менеджер свяжется с Вами в ближайшее время.
Рассчитать стоимость
Задать вопрос
Карта сценариев использования ИИ для управления маркетингом, продажами и сервисом
Заполните форму и мы отправим исследование на E-mail
Присоединяйтесь к партнерской сети BPMSoft
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время
Тип партнерства*
Управление полным жизненным циклом клиента: от генерации лидов и продаж до внедрения, поддержки и продления подписки.
Разработка собственного Приложения – производного программного обеспечения, созданного на платформе BPMSoft (Базовое ПО).
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Стать образовательным партнёром
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Заявка на консультацию
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Подписка
Спасибо!
Ваша заявка принята.
Наш сотрудник свяжется с вами в течение 1-2 рабочих дней.
Внимание!
Обнаружена ошибка.
Проверьте вашу почту
Для завершения подписки перейдите по ссылке в письме, которое мы только что отправили. Если письма нет во «Входящих», проверьте папку «Спам».
Telegram Подписаться
Уважаемые клиенты! Предупреждаем о случаях недобросовестной конкуренции и мошенничестве в сети Интернет.
Подробнее