Creatio development guide
PDF
Это документация Creatio версии 7.16.0. Мы рекомендуем использовать новую версию документации.

Ограничение доступа к веб-сервисам для пользователей Портала

Glossary Item Box

Общие сведения

Портал — это компонент платформы Creatio, основная цель которого — реализовать процесс самообслуживания клиентов и партнеров вашей компании. Также портал можно использовать для организации работы внутренних пользователей, если необходим ограниченный доступ к функциональности основного приложения.

Основной сценарий использования портала — предоставить доступ большому количеству внешних по отношению к организации пользователей к ограниченному количеству данных из системы. Для решения таких задач возникает потребность управлять тем, какие пользователи (портальные или пользователи компании) имеют доступ к веб-сервисам приложения.

Данная статья актуальна для версии системы 7.13.2 и новее.

Создание конфигурационного веб-сервиса подробно описано в статье "Разработка и вызов конфигурационного сервиса".

Префиксы маршрутов конфигурационных веб-сервисов

Для управления доступом к веб-сервисам приложения в Creatio реализован механизм префиксов маршрута. Используя определеннные ServiceRoute атрибуты класса сервиса, можно задать необходимый префикс маршрута (табл. 1).

Табл. 1. — Префиксы маршрутов конфигурационных веб-сервисов

Доступ Атрибут Префикс маршрута Пример кода
Только для пользователей Портала самообслуживания SspServiceRoute /ssp
[ServiceContract]
[SspServiceRoute]
public class SspOnlyService : BaseService
{
}

Пример вызова

~/ssp/rest/SspOnlyService

~/ssp/soap/SspOnlyService

Только для внутренних пользователей

DefaultServiceRoute

или

не указывать ни один ServiceRoute атрибут

отсутствует
[ServiceContract]
public class InternalService : BaseService
{
}

или

[ServiceContract]
[DefaultServiceRoute]
public class InternalService : BaseService
{
}

Пример вызова

~/rest/InternalService

~/soap/InternalService

И для внутренних пользователей и для Портала

одновременно атрибуты

DefaultServiceRoute

и

SspServiceRoute

/ssp

или

отсутствует

[ServiceContract]
[DefaultServiceRoute]
[SspServiceRoute]
public class CommonService : BaseService
{
}

Пример вызова

~/rest/CommonService

~/soap/CommonService

~/ssp/rest/CommonService

~/ssp/soap/CommonService

атрибут ServiceRoute с указанием префикса (например, "custom")

[ServiceRoute("custom")]

произвольный префикс маршрута сервиса
[ServiceContract]
[ServiceRoute("custom")]
public class CustomPrefixService : BaseService
{
}

Пример вызова

~/custom/rest/CustomPrefixService

~/custom/soap/CustomPrefixService

Допустимо использовать одновременно несколько атрибутов ServiceRoute, SspServiceRoute и DefaultServiceRoute. В результате будут созданы маршруты для сервиса со всеми вариантами префиксов.

Ограничение доступа портальных пользователей к внутреннему API

Если пользователь портала (SspUserConnection) обратится к сервису по маршруту без префикса “/ssp”, сервис вернет в ответ страницу с кодом 403 (Forbidden).

Ограничение доступа внутренних пользователей к портальному API

Если внутренний пользователь приложения (UserConnection) обратится к сервису по маршрутус префиксом “/ssp”, сервис вернет в ответ страницу с кодом 403 (Forbidden).

Изменение доступа к базовому сервису

В приложении существует набор базовых сервисов, доступ к которым есть только у внутренних пользователей.

Для изменеия доступа к базовому сервису необходимо:

  1. В пользовательском пакете создать сервис с настройкой доступа для портальных пользователей.
  2. Добавить для него те методы базового сервиса, которые должны быть доступны для портальных пользователей.
  3. Изменить пользовательские или расширить базовые клиентские схемы, изменив вызов базового сервиса на вызов созданного сервиса (см. шаг 1).
  4. Скомпилировать конфигурацию.

Пример исходного кода сервиса, который расширяет доступ к базовому сервису ActivityUtilService:

namespace Terrasoft.Configuration
{ 
    using System;
    using System.IO;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Activation;
    using System.ServiceModel.Web;
    using Terrasoft.Configuration.FileUpload;
    using Terrasoft.Core.Factories;
    using Terrasoft.Web.Common;
    using Terrasoft.Web.Common.ServiceRouting;
    
    [ServiceContract]
    // Сервис доступен и для внутренних пользователей и для Портала.
    [DefaultServiceRoute]
    [SspServiceRoute]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class PartnerActivityUtilService: BaseService {
        // Базовый сервис, доступ к которому необходимо расширирть.
        private static readonly ActivityUtilService _baseService = new ActivityUtilService();
        
        [OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
        public Guid CreateActivityFileEntity(JsonActivityFile jsonActivityFile) { 
            return _baseService.CreateActivityFileEntity(jsonActivityFile); 
        } 
        [OperationContract] 
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        public Guid CreateFileEntity(JsonEntityFile jsonEntityFile) {
            return _baseService.CreateFileEntity(jsonEntityFile); 
        } 
    } 
} 

ServiceStack сервисы ядра

Методы сервисов ServiceStack ядра (DataService, ManagerService и другие) по умолчанию доступны только для внутренних пользователей.

Для того, чтобы какой-то из методов был доступен также и на Портале, необходимо пометить такой метод атрибутом SspServiceAccess - в этом случае метод будет иметь дополнительный маршрут с префиксом вида ~/DataService/ssp/…

Если нужно, чтобы логика метода отличалась для Портала, необходимо создать новый сервис, указав для него атрибут SspServiceAccess, в конструктор которого передать имя оригинального метода. Например:

[SspServiceAccess(nameof(SelectQuery))]
public class SspSelectQuery : SelectQuery
{
}

создает контракт, метод которого будет зарегистрирован по пути

~/DataService/ssp/SelectQuery.

Доступ к методам ServiceStack с префиксом “ssp” запрещен внутренним пользователям, а к методам ServiceStack без префикса “ssp” - пользователям портала.

© Terrasoft 2002-2020.

Был ли данный материал полезен?

Как можно улучшить эту статью?