Как заставить RoleManager лезть в нужную мне БД?
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 21.03.07 19:22
Оценка:
Вот содержимое моего xml-файла:

<configuration>
<connectionStrings>
<add name="SqlConnectionMain" connectionString="Data Source=BUDDA-2003E\sqlexpress;Initial Catalog=vfm_elita_bn;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<authentication mode="Forms">
</authentication>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlConnectionMain" applicationName="MembershipSample" enablePasswordRetrieval="false" enablePasswordReset="false"
requiresQuestionAndAnswer="false" passwordFormat="Hashed"
minRequiredPasswordLength="3" minRequiredNonalphanumericCharacters="0" />
</providers>
</membership>
</system.web>
</configuration>

Этого мало? ПОдскажите, плиз, почему при вызове:

if (!Roles.RoleExists("user"))
                Roles.CreateRole("user");

Идёт обращение не к мое БД, которая подключается при помощи SqlConnectionMain, а куда-то в системные базы...
Re: Как заставить RoleManager лезть в нужную мне БД?
От: maden Россия  
Дата: 22.03.07 05:20
Оценка:
Здравствуйте, _Budda_, Вы писали:

_B_>Вот содержимое моего xml-файла:

_B_>

_B_><configuration>
_B_> <connectionStrings>
_B_> <add name="SqlConnectionMain" connectionString="Data Source=BUDDA-2003E\sqlexpress;Initial Catalog=vfm_elita_bn;Integrated Security=True" providerName="System.Data.SqlClient" />
_B_> </connectionStrings>
_B_> <system.web>
_B_> <authentication mode="Forms">
_B_> </authentication>
_B_> <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
_B_> <providers>
_B_> <clear/>
_B_> <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlConnectionMain" applicationName="MembershipSample" enablePasswordRetrieval="false" enablePasswordReset="false"
_B_> requiresQuestionAndAnswer="false" passwordFormat="Hashed"
_B_> minRequiredPasswordLength="3" minRequiredNonalphanumericCharacters="0" />
_B_> </providers>
_B_> </membership>
_B_> </system.web>
_B_></configuration>

_B_>Этого мало? ПОдскажите, плиз, почему при вызове:

_B_>
_B_>if (!Roles.RoleExists("user"))
_B_>                Roles.CreateRole("user");
_B_>

_B_>Идёт обращение не к мое БД, которая подключается при помощи SqlConnectionMain, а куда-то в системные базы...

Вся проблема в том, что указан стандартный провайдер Membership, который указывается в type="System.Web.Security.SqlMembershipProvider", он и определяет в какие таблицы писать и как организованы стандартные функции, предоставляемые механизмом Mebership (как писать свои провайдеры можно посмотреть в книге Professional ASP.NET 2.0 Security, Membership, and Role Management by Stefan Schackow), вы лишь поменяли строу коннекта к базе данных
Настоящий инжинер не тот, кто все знает, а тот кто знает
где <b><a href="http://msdn2.microsoft.com">посмотреть</a></b> (или у кого <b><a href="http://www.google.ru">спросить</a></b>)
Re[2]: Как заставить RoleManager лезть в нужную мне БД?
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 22.03.07 06:25
Оценка:
Как я понимаю, писать свой провайдер дело геморойное да и не особо нужное, верно? Но как же быть? Если допустим на своём компе я могу закрыть глаза на тот факт, что RoleManager лезет в системные базы, то в случае размещения сайта на платном хостинге, хостеру это может не понравиться. Или они (хостеры) на это тоже обычно закрывают глаза?
Re[3]: Как заставить RoleManager лезть в нужную мне БД?
От: ITweb Россия  
Дата: 22.03.07 06:53
Оценка:
Здравствуйте, _Budda_, Вы писали:

_B_>Как я понимаю, писать свой провайдер дело геморойное да и не особо нужное, верно?


Нет. Не верно, в сети куча примеров как их писать, так что проблем не должно возникнуть, я например за день все провайдеры переписал (Role, Membership, Profile и т.д.). Если вам требуется своя логика и место хранения данных то без этого не обойтись (написания своего провайдера).

_B_>Если допустим на своём компе я могу закрыть глаза на тот факт, что RoleManager лезет в системные базы, то в случае размещения сайта на платном хостинге, хостеру это может не понравиться.


Начнем с того что эти провайдеры не лезут ни в какие системный базы! А использую свою базу aspnetdb, которая ни чем не отличается от остальных!
Re[4]: Как заставить RoleManager лезть в нужную мне БД?
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 22.03.07 22:44
Оценка:
Проблема была в том, что:
1. в моей базе не были созданы нужные таблицы (см. здесь: http://www.rsdn.ru/Forum/Message.aspx?mid=2414082
Автор: _Budda_
Дата: 21.03.07
),
2. забыл заэнейблить RoleManager в web.config

<roleManager enabled="true" defaultProvider="RoleManagerMain">
<providers>
<add name="RoleManagerMain"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlConnectionMain"
applicationName="ElitaBannerNetwork" />
</providers>
</roleManager>


И не нужно ничего писать, никаких провайдеров....
Re[5]: Как заставить RoleManager лезть в нужную мне БД?
От: ITweb Россия  
Дата: 23.03.07 05:50
Оценка:
Здравствуйте, _Budda_, Вы писали:

Читай внимательнее

Если вам требуется своя логика и место хранения данных то без этого не обойтись (написания своего провайдера).


Ну если вас устраивает все по дефолту, то конечно не надо. Удачи
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.