Поделиться через


Пример реализации поставщика ролей

Обновлен: Ноябрь 2007

В этом разделе описан пример поставщика ролей и схема поддерживаемого источника данных.

В разделах ниже приведен код с примером реализации поставщика ролей. В этом примере поставщика ролей подключение к источнику данных ODBC выполняется с помощью поставщика данных в платформе .NET Framework. В качестве источника данных в этом примере используется база данных Access.

В этом примере описан пример реализации поставщика профилей и настройка приложения ASP.NET на использование этого поставщика.

tksy7hd7.alert_note(ru-ru,VS.90).gifПримечание.

Так как в источниках данных используется разный синтаксис SQL, некоторые команды будут работать с одним определенным источником данных. Поэтому следует создавать поставщики ролей, которые подходят для конкретного источника данных, даже если для доступа к источнику данных используется поставщик данных платформы .NET Framework для ODBC или поставщик данных платформы .NET Framework для OLEDB, например, SybaseProfileProvider или OracleProfileProvider.

Код этого примера приведен в разделе Практическое руководство. Пример реализации поставщика ролей.

Схема базы данных

Для управления сведениями о ролях в этом примере поставщика ролей используется две таблицы баз данных: таблица Roles, которая содержит названия ролей и приложений, а также таблица UsersInRoles, с помощью которой в приложении устанавливается соответствие между именами пользователей и названиями ролей.

Эти таблицы Access в примере поставщика создаются с помощью приведенного ниже запроса определения данных в новой или существующей базе данных Access.

CREATE TABLE Roles
(
  Rolename Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
    CONSTRAINT PKRoles PRIMARY KEY (Rolename, ApplicationName)
)

CREATE TABLE UsersInRoles
(
  Username Text (255) NOT NULL,
  Rolename Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
    CONSTRAINT PKUsersInRoles PRIMARY KEY (Username, Rolename, ApplicationName)
)

Доступ к журналу событий

Если при работе с источником данных в этом примере поставщика возникает исключение, оно не возвращается приложению ASP.NET; вместо этого данные исключения записываются в журнал событий приложения. Эта мера предосторожности обеспечивает безопасность, — она не позволяет экспортировать конфиденциальные сведения об источнике данных в приложение ASP.NET.

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcRoleProvider

Если пример поставщика не должен записывать данные об исключениях в журнал событий, в файле Web.config можно присвоить атрибуту writeExceptionsToEventLog значение false.

Построение поставщика из примера

Чтобы использовать пример поставщика, можно поместить исходный код в каталог App_Code приложения. Обратите внимание, что в том случае, если в этом каталоге уже имеется исходный код, необходимо добавить версию данного примера поставщика, написанную на том же языке, что и код, уже имеющийся в каталоге. Поставщик компилируется средствами ASP.NET при вызове приложения.

Также можно скомпилировать пример поставщика в качестве библиотеки и поместить эту библиотеку в каталог Bin веб-приложения, или же присвоить этой библиотеке строгое имя и поместить ее в глобальный кэш сборок (GAC). Приведенная ниже команда показывает, как можно скомпилировать поставщик из примера с помощью компилятора командной строки.

vbc /out:OdbcRoleProvider.dll /t:library OdbcRoleProvider.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out:OdbcRoleProvider.dll /t:library OdbcRoleProvider.cs /r:System.Web.dll /r:System.Configuration.dll

Использование поставщика из примера в приложении ASP.NET

В следующем примере кода показано, как настроить файл Web.config для приложения ASP.NET на использование поставщика. В этом примере с помощью ODBC DSN с именем RolesDSN выполняется получение сведений о подключении к базе данных Access. Для того чтобы использовать этот пример поставщика, понадобится создать системный DSN с именем RolesDSN или добавить в базу данных правильную строку соединения ODBC.

Конфигурация примера предполагает, что веб-узел настроен на использование проверки подлинности с помощью форм и включает страницу ASP.NET с именем login.aspx, которая позволяет пользователям входить в систему:

<configuration>
  <connectionStrings>
    <add name="OdbcServices" connectionString="DSN=RolesDSN;" />
  </connectionStrings>

  <system.web>
    <authentication mode="Forms" />
      <forms loginUrl="loginvb.aspx"
        name=".ASPXFORMSAUTH" />
    </authentication>

    <authorization>
      <deny users="?" />
    </authorization>

    <roleManager defaultProvider="OdbcRoleProvider" 
      enabled="true"
      cacheRolesInCookie="true"
      cookieName=".ASPROLES"
      cookieTimeout="30"
      cookiePath="/"
      cookieRequireSSL="false"
      cookieSlidingExpiration="true"
      cookieProtection="All" >
      <providers>
        <clear />
        <add
          name="OdbcRoleProvider"
          type="Samples.AspNet.Roles.OdbcRoleProvider"
          connectionStringName="OdbcServices" 
          applicationName="SampleApplication" 
          writeExceptionsToEventLog="false" />
      </providers>
    </roleManager>

  </system.web>
</configuration>

См. также

Основные понятия

Реализация поставщика ролей

Другие ресурсы

Управление авторизацией с помощью ролей

Защита веб-узлов ASP.NET