Основная реализация интерфейса модуля аутентификации и авторизации ISecurityManager - SecurityManager.

Описание SecurityManager

SecurityManager используется в качестве класса для разграничения прав пользователей на серверной стороне. Данный класс реализует общий интерфейс ISecurityManager, используемый компонентами приложений Flexberry для обращения к API подсистемы полномочий на сервере. Если в приложении требуется отличная от предоставляемой SecurityManager реализация подсистемы полномочий, то следует реализовать интерфейс ISecurityManager и зарегистрировать эту реализацию в Unity-секции конфигурационного файла.

API подсистемы полномочий на сервере

Проверка доступа текущего пользователя к указанному типу данных

Проверка доступа текущего пользователя к указанной операции

Настройка приложения на использование SecurityManager

Настройка использования SecurityManager в секции Unity конфигурационного файла веб-приложения web.config.

  <appSettings>
    <!-- … -->
    <add key="DataServiceType" value="ICSSoft.STORMNET.Business.MSSQLDataService, ICSSoft.STORMNET.Business.MSSQLDataService" />
    <add key="DefaultConnectionStringName" value="DefConnStr" />

    <!-- Если БД полномочий лежит отдельно от основной, можно сослаться на другую строку соединения -->
    <add key="SecurityConnectionStringName" value="CaseberrySecurity" />
    <!-- … -->
  </appSettings>

  <!-- … -->
  <!-- Строки соединения вриложения объявляются в этой секции. Формат строк соединения всегда можно подсмотреть на специальном сайте <https://www.connectionstrings.com/>. -->
  <connectionStrings>
    <!-- … -->
    <add name="DefConnStr" connectionString="СТРОКА СОЕДИНЕНИЯ с БД ПРИЛОЖЕНИЯ" 
      providerName="ICSSoft.STORMNET.Business.MSSQLDataService, ICSSoft.STORMNET.Business.MSSQLDataService, Version=1.0.0.1, Culture=neutral, PublicKeyToken=49b42003269a4a66" />
    <add name="CaseberrySecurity"
      connectionString="СТРОКА СОЕДИНЕНИЯ С БД ПОЛНОМОЧИЙ"
      providerName="ICSSoft.STORMNET.Business.MSSQLDataService, ICSSoft.STORMNET.Business.MSSQLDataService, Version=1.0.0.1, Culture=neutral, PublicKeyToken=49b42003269a4a66"/>
    <!-- … -->
  </connectionStrings>

  <!-- … -->
  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <container>
      <!-- … -->
      <!-- Конфигурация сервиса кеширования. -->
      <register type="NewPlatform.Flexberry.Caching.ICacheService, NewPlatform.Flexberry.Caching" mapTo="NewPlatform.Flexberry.Caching.MemoryCacheService, NewPlatform.Flexberry.Caching">
        <lifetime type="singleton" />
        <constructor>
          <param name="cacheName" type="System.String" value="defaultCacheForApplication" />
        </constructor>
      </register>

      <!-- securityManagerWithoutRightsCheck - менеджер полномочий с выключенной проверкой полномочий. -->
      <register name="securityManagerWithoutRightsCheck" type="ICSSoft.STORMNET.Security.ISecurityManager, ICSSoft.STORMNET.DataObject"
         mapTo="ICSSoft.STORMNET.Security.EmptySecurityManager, ICSSoft.STORMNET.DataObject">
        <lifetime type="singleton" />
        <constructor />
      </register>

      <!-- Сервис данных, через который будет идти запрос к полномочиям. Здесь дублируется тип сервиса данных, а также указывается строка соединения с БД полномочий. Использовать данный сервис данных где-либо ещё крайне нежелательно. -->
      <register name="dataServiceForSecurityManager" type="ICSSoft.STORMNET.Business.IDataService, ICSSoft.STORMNET.Business"
        mapTo="ICSSoft.STORMNET.Business.MSSQLDataService, ICSSoft.STORMNET.Business.MSSQLDataService" >
        <constructor>
          <!-- Менеджер полномочий, который используется сервисом данных для проверки полномочий. Чтобы сервис данных имел возможность обращаться к объектам системы полномочий в БД для пользователей которые ещё не прошли аутентификацию, он будет использовать securityManagerWithoutRightsCheck - это менеджер полномочий с выключенной проверкой полномочий. -->
          <param name="securityManager" type="ICSSoft.STORMNET.Security.ISecurityManager, ICSSoft.STORMNET.DataObject">
            <dependency name="securityManagerWithoutRightsCheck" />
          </param>
        </constructor>
        <!-- Имя строки соединения с БД полномочий. -->
        <property name="CustomizationStringName" dependencyType="System.String" value="CaseberrySecurity" />
      </register>

      <!-- Сервис кэширования, который будет использоваться для временного хранения настроек, вычитанных из базы данных для менеджера полномочий. По имени данного кэша его можно полностью очистить в случае необходимости. -->
      <register name="cacheServiceForSecurityManager" type="NewPlatform.Flexberry.Caching.ICacheService, NewPlatform.Flexberry.Caching"
        mapTo=" NewPlatform.Flexberry.Caching.MemoryCacheService, NewPlatform.Flexberry.Caching" >
        <lifetime type="singleton" />
        <constructor>
          <!-- Имя кэша, по которому можно будет осуществить его очистку. -->
          <param name="cacheName" type="System.String" value="cacheForSecurityManager" />
        </constructor>
      </register>
      
      <!-- Сервис кэширования, который будет использоваться для временного хранения настроек, вычитанных из базы данных для менеджера агентов. По имени данного кэша его можно полностью очистить в случае необходимости. -->
      <register name="cacheServiceForAgentManager" type="NewPlatform.Flexberry.Caching.ICacheService, NewPlatform.Flexberry.Caching" mapTo="NewPlatform.Flexberry.Caching.MemoryCacheService, NewPlatform.Flexberry.Caching">
        <lifetime type="singleton" />
        <constructor>
          <param name="cacheName" type="System.String" value="cacheForAgentManager" />
        </constructor>
      </register>
      
      <!-- Менеджер полномочий, который будет использоваться сервисом данных DataServiceProvider.DataService. -->
      <register type="ICSSoft.STORMNET.Security.ISecurityManager, ICSSoft.STORMNET.DataObject"
        mapTo="NewPlatform.Flexberry.Security.SecurityManager, NewPlatform.Flexberry.Security">
        <constructor>
          <!-- dataServiceForSecurityManager - сервис данных, через который будет идти запрос к полномочиям. -->
          <param name="dataService" type="ICSSoft.STORMNET.Business.IDataService, ICSSoft.STORMNET.Business">
            <dependency name="dataServiceForSecurityManager" />
          </param>
          <param name="cacheService" type="NewPlatform.Flexberry.Caching.ICacheService, NewPlatform.Flexberry.Caching">
            <dependency name="cacheServiceForSecurityManager" />
          </param>
          <!-- Проверка полномочий включена. -->
          <param name="enabled" type="System.Boolean" value="true"/>
          <!-- Проверка полномочий на объекты включена. -->
          <param name="useRightsOnObjects" type="System.Boolean" value="true"/>
          <!-- Проверка полномочий на атрибуты включена. -->
          <param name="useRightsOnAttribute" type="System.Boolean" value="true"/>
        </constructor>
      </register>

      <!-- Менеджер агентов. -->
      <register type="NewPlatform.Flexberry.Security.IAgentManager, NewPlatform.Flexberry.Security" mapTo="NewPlatform.Flexberry.Security.AgentManager, NewPlatform.Flexberry.Security">
        <constructor>
          <param name="dataService" type="ICSSoft.STORMNET.Business.IDataService, ICSSoft.STORMNET.Business">
            <dependency name="dataServiceForSecurityManager" />
          </param>
          <param name="cacheService" type="NewPlatform.Flexberry.Caching.ICacheService, NewPlatform.Flexberry.Caching">
            <dependency name="cacheServiceForAgentManager" />
          </param>
        </constructor>
      </register>

      <!-- Хешер паролей для приложения, который будет использоваться в частности для хеширования паролей агентов полномочий. Можно в конструкторе хешеру указать соль через строковый параметр salt.-->
      <register type="NewPlatform.Flexberry.Security.IPasswordHasher, NewPlatform.Flexberry.Security" mapTo="NewPlatform.Flexberry.Security.Sha1PasswordHasher, NewPlatform.Flexberry.Security">
        <lifetime type="singleton" />
        <constructor />
      </register>

      <!-- Сервис, позволяющий разрешать имя строки соединения, переданное через параметр CustomizationStringName.-->
      <register type="ICSSoft.STORMNET.Business.IConfigResolver, ICSSoft.STORMNET.Business" mapTo="ICSSoft.STORMNET.Business.ConfigResolver, ICSSoft.STORMNET.Business">
        <lifetime type="singleton" />
        <constructor />
      </register>
    <!-- … -->
    </container>
  </unity>
  <!-- … -->
  <system.web>
    <!-- … -->
    <!-- Провайдер, который используется для выполнения аутентификации пользователей. -->
    <membership defaultProvider="FlexberryMembershipProvider">
      <providers>
        <clear/>
        <add name="FlexberryMembershipProvider" type="NewPlatform.Flexberry.Security.FlexberryMembershipProvider"/>
      </providers>
    </membership>
    <!-- Провайдер, который позволяет определять роли, которые есть у пользователей (используется, например, в sitemap roles). -->
    <roleManager defaultProvider="FlexberryRoleProvider" enabled="true">
      <providers>
        <clear/>
        <add name="FlexberryRoleProvider" type="NewPlatform.Flexberry.Security.FlexberryRoleProvider"/>
      </providers>
    </roleManager>
    <!-- Провайдер профилей пользоватля. -->
    <profile enabled="true" defaultProvider="FlexberryProfileProvider" automaticSaveEnabled="false">
      <providers>
        <clear/>
        <add name="FlexberryProfileProvider" type="NewPlatform.Flexberry.Security.FlexberryProfileProvider"/>
      </providers>
      <properties>
        <add name="FriendlyName"/>
        <add name="AgentKey"/>
      </properties>
    </profile>
    <!-- … -->
  </system.web>
  <!-- … -->