Пример реализации поставщика ролей
Обновлен: Ноябрь 2007
В этом разделе описан пример поставщика ролей и схема поддерживаемого источника данных.
В разделах ниже приведен код с примером реализации поставщика ролей. В этом примере поставщика ролей подключение к источнику данных ODBC выполняется с помощью поставщика данных в платформе .NET Framework. В качестве источника данных в этом примере используется база данных Access.
В этом примере описан пример реализации поставщика профилей и настройка приложения ASP.NET на использование этого поставщика.
Примечание. |
---|
Так как в источниках данных используется разный синтаксис 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>