Методы получения текущих прав по клиентам

Получение данных по всем клиентам

Получение данных по клиенту

Текущие права клиентов

КлиентТип записиПрава**. План 2 этап - 2DR API 2.28 - Текущие
1Кол-центр, робот КЦОбычная записьКол-центр
2Кол-центр, робот КЦЗапись по направлениюКол-центр | Другая МО
3Кол-центр, робот КЦЗапись по направлению в другую МОКол-центр | Другая МО
4ИнфоматОбычная записьИнфомат
5ИнфоматЗапись по направлениюИнфомат | Другая МО
6ИнфоматЗапись по направлению в другую МОИнфомат | Другая МО
7Интернет, 2др, другие порталы самозаписиОбычная записьИнтернет
8

Интернет, 2др, другие порталы самозаписи

Запись по направлениюИнтернет | Другая МО
9

Интернет, 2др, другие порталы самозаписи

Запись по направлению в другую МОИнтернет | Другая МО
10ГосуслугиОбычная запись

Регистратура | Интернет | Инфомат | Кол-центр

11ГосуслугиЗапись по направлениюРегистратура | Интернет | Инфомат | Кол-центр | Другая МО
12ГосуслугиЗапись по направлению в другую МОРегистратура | Интернет | Инфомат | Кол-центр | Другая МО
13

МИС*

Обычная записьРегистратура | Врач
14МИС*Запись по направлениюРегистратура | Врач
15МИС*Запись по направлению в другую МОДругая МО***
16Врач-врачВсеДругая МО

Если клиентское приложение себя не идентифицирует, то по умолчанию ему будет отдано расписание с правом доступа Интернет.

Если клиентское приложение отсутствует в списке выше, то это значит что у него права Интернет.

*- когда МИС использует методы API 2др.

**- Уровень доступа формируется на основе флагов

***- Сначала провели в Белгородской области , затем в остальных также убрали Регистратуру. Скрипт в задаче API-2382 - Получение подробных данных проблемы... СТАТУС

Значения флагов
Регистратура (код REGISTRY) = 1,
Врач (код DOCTOR) = 2,
Интернет (код INTERNET) = 4,
Другая МО (код OTHER_MO) = 8,
Инфомат (код INFOMAT) = 32,
Кол-центр (код CALL_CENTER) = 64,
EPGU (код EPGU) = 128 (данный бит появился в МИС на PostgreSQL).

Данные значения хранятся в БД домена "Расписания" PostgreSQL в справочнике nsi.timetable_access_role.

Для слота расписания представление битовых флагов в виде десятичного значения хранится в hlt_DoctorTimeTable.FlagAccess (MS SQL Server) и в appt.timetable.access_flag (PostgreSQL).
Десятичное значение можно перевести в двоичное в калькуляторе, либо в любом онлайн сервисе. Каждый бит, читая справа налево, определяет права доступа к слоту расписания (1 - доступ есть, 0 - доступа нет).
Скрипт для разложения числового значения на права клиентов/роли, где в values передать значение в десятичной системе:
select ttar.timetable_access_role_id
     , ttar.name
     , ttar.access_flag
     , access_rule.is_enabled
  from nsi.timetable_access_role ttar
       left join lateral ( select t.access_flag & ttar.access_flag > 0 as is_enabled
                             from (values (235)) as t (access_flag)
                         ) access_rule on true;


Запрос получения прав клиентов (ЦОД НСИ)
select 
ca.Mnem as [ClientApplicationName],
ca.ClientApplicationGuid as [ClientApplicationGuid],
cf.Name as [Function],
cp.Access as [Access],
cp.ScheduleDays as [ScheduleDays],
case when cp.Access & 1 > 0 then 1 else 0 end as [Регистратура],
case when cp.Access & 2 > 0 then 1 else 0 end as [Врач],
case when cp.Access & 4 > 0 then 1 else 0 end as [Интернет],
case when cp.Access & 8 > 0 then 1 else 0 end as [Другая МО],
case when cp.Access & 32 > 0 then 1 else 0 end as [Инфомат],
case when cp.Access & 64 > 0 then 1 else 0 end as [Кол-центр]
from oms_ClientPermission cp
join oms_ClientFunction cf on cp.rf_ClientFunctionId = cf.ClientFunctionId
join oms_ClientApplication ca on cp.rf_ClientApplicationId = ca.ClientApplicationId
where cp.ClientPermissionId > 0
Скрипт для разложения числа на права
PostgreSQL:
select t.access_flag & 1 > 0 as Регистратура,
       t.access_flag & 2 > 0 as Врач,
       t.access_flag & 4 > 0 as Интернет,
       t.access_flag & 8 > 0 as Другая_МО,
       t.access_flag & 32 > 0 as Инфомат,
       t.access_flag & 64 > 0 as Кол_центр,
       t.access_flag & 128 > 0 as Портал_госуслуг
  from (values (239)) as t (access_flag);

MS SQL Server:
declare @access int = 239
select
case when @access & 1 > 0 then 1 else 0 end as [Регистратура],
case when @access & 2 > 0 then 1 else 0 end as [Врач],
case when @access & 4 > 0 then 1 else 0 end as [Интернет],
case when @access & 8 > 0 then 1 else 0 end as [Другая МО],
case when @access & 32 > 0 then 1 else 0 end as [Инфомат],
case when @access & 64 > 0 then 1 else 0 end as [Кол-центр],
case when @access & 128 > 0 then 1 else 0 end as [Портал госуслуг]


Сервис определения прав(распространяется нугетом) http://bitbucket.softrust.ru/projects/TODR/repos/2dr-schedule-api/browse/src/Schedule/SofTrust.WebApi.Schedule.Library/Services/ClientAccess/ClientAccessService.cs

Перед проведением любых скриптов со страницы необходимо проверить таблицу "oms_ClientFunction" на наличие данных: VisitDoctor, VisitDirection, VisitDirectionOtherLpu

Скрипты для применения прав доступа(выполнять на базе ЦОД НСИ):

Обновление права доступа к ячейкам расписания клиентских приложений. 1 этап.sql - Применяет права согласно 1 этапу

Обновление права доступа к ячейкам расписания клиентских приложений. 2 этап.sql - Применяет права согласно 2 этапу

Новые права для робота КЦ.sql - делает права робота КЦ как у самого КЦ

Справочники. (API-3045). Расширение прав ЕПГУ на все кроме Врач и Врач другой ЛПУ.sql - дает Госуслугам расширенные права

Скрипты для добавления новых клиентов и добавления их прав:

Справочники (API-2458) Добавление нового клиента 'Стационар'.sql - добавляет новый клиент "Стационар" и права к нему.

Справочники (API-2397) Добавление нового клиента Робот Полимедика.sql - добавляет новый клиент "Робот Полимедика" и права к нему

Справочники(API-2219) Добавление нового клиента Социальная защита населения.sql - добавляет новый клиент "СоцЗащита" и права к нему
Скрипты для добавления дней доступных для записи для клиентов

Кол-во дней для записи для клиентов.sql