[XML]
<roleManager enabled="true"></roleManager>
[/XML]
Проверка ролей у пользователей
Мой вопрос в принципе не вызывает особой сложности. Дело в том, что нужно проверить роли у каждого авторизованного пользователя на моем ASP.nET 2.0 сайте. Есть один Админ, ну и все остальные - это юзеры. Проблема заключается в том, что почему-то не работает эта самая проверка ролей у авторизованных пользователей.(
что я делаю..
1. прописал в Web.config - разрешение на упр-е ролями
Код:
2. на форму кинул элем. упр-я LoginView, и задал у него в "Правка RoleGroups" - 2 роли: "Administrator" и "User" и по умолчаню выбрал в представлении LoginView - роль "Administrator".
3. у LoginView зашел в "Администрировать веб-узел" добавил там 2 вышеперечисленные роли, закинул на каждую роль по одному юзеру из моей бд... p.s. после выбора юзера для роли, я потом точно ставил напротив галочку "Пользователь в роли".
4. собственно сама проверка на главной странице:
Код:
[CSHARP]
if (Context.User.IsInRole("Administrator"))
{
lbl_status.Text = "Админ";
}
else if (Context.User.IsInRole("User"))
{ lbl_status.Text = "Пользователь"; }
[/CSHARP]
if (Context.User.IsInRole("Administrator"))
{
lbl_status.Text = "Админ";
}
else if (Context.User.IsInRole("User"))
{ lbl_status.Text = "Пользователь"; }
[/CSHARP]
5. здесь что я сделал в WEB.config, в том числе и по мемберщипу
Код:
[XML]
<connectionStrings>
<add name="SqlServices" connectionString="Data Source=localhost; Integrated Security=SSPI; Initial Catalog=ASPBASE_9lab"/>
</connectionStrings>
<system.web>
<roleManager cacheRolesInCookie="true" enabled="true"></roleManager>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<clear/>
<add name="SqlProvider" enablePasswordRetrieval="false" enablePasswordReset="true" passwordFormat="Hashed"
requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" requiresQuestionAndAnswer="true"
type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlServices"
minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"
applicationName="/"/>
</providers>
</membership>
[/XML]
<connectionStrings>
<add name="SqlServices" connectionString="Data Source=localhost; Integrated Security=SSPI; Initial Catalog=ASPBASE_9lab"/>
</connectionStrings>
<system.web>
<roleManager cacheRolesInCookie="true" enabled="true"></roleManager>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<clear/>
<add name="SqlProvider" enablePasswordRetrieval="false" enablePasswordReset="true" passwordFormat="Hashed"
requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" requiresQuestionAndAnswer="true"
type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlServices"
minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"
applicationName="/"/>
</providers>
</membership>
[/XML]
6. и вот что я сделал для LoginView, не считая настройки на веб-узле LoginView (про то что я выше писал "Администрировать веб-узел")
Код:
[XML]
<asp:LoginView ID="LoginView1" runat="server">
<RoleGroups>
<asp:RoleGroup Roles="Administrator">
<ContentTemplate>
Администратор
</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="User">
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
[/XML]
<asp:LoginView ID="LoginView1" runat="server">
<RoleGroups>
<asp:RoleGroup Roles="Administrator">
<ContentTemplate>
Администратор
</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="User">
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
[/XML]
7. да и кстати у LoginView в представлении я выбираю по умолчанию из 2 ролей : первую роль, та что Roles[0] - Administrator (все это делаю в дизайнере формы)
p.s. вообщем роли никак не определяются для юзеров, кто бы это не был...(( жду ваших комментов и еще раз говорю, что Роли делали сам, через LoginView зашел в "Администрировать веб-узел" и там добавил их.
провайдер ролей (Шаг 2).
Настройте
в примере я в принципе сделал основное что нужно было, в итоге получилось вот так:
Код:
<connectionStrings>
<add name="SqlServices" connectionString="Data Source=localhost; Integrated Security=SSPI; Initial Catalog=ASPBASE_9lab"/>
</connectionStrings>
<system.web>
<roleManager enabled="true" defaultProvider="SqlRoleManager">
<providers>
<add name="SqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlServices"
applicationName="/" />
</providers>
</roleManager>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<clear/>
<add name="SqlProvider" enablePasswordRetrieval="false" enablePasswordReset="true" passwordFormat="Hashed"
requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" requiresQuestionAndAnswer="true"
type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlServices"
minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"
applicationName="/"/>
</providers>
</membership>
<add name="SqlServices" connectionString="Data Source=localhost; Integrated Security=SSPI; Initial Catalog=ASPBASE_9lab"/>
</connectionStrings>
<system.web>
<roleManager enabled="true" defaultProvider="SqlRoleManager">
<providers>
<add name="SqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlServices"
applicationName="/" />
</providers>
</roleManager>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<clear/>
<add name="SqlProvider" enablePasswordRetrieval="false" enablePasswordReset="true" passwordFormat="Hashed"
requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" requiresQuestionAndAnswer="true"
type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlServices"
minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"
applicationName="/"/>
</providers>
</membership>
но толка от этого никакого, по-прежнему не определяются роли... вот где я проверяю те самые роли:
Код:
if (Context.User.IsInRole("Administrator")) // ВООБЩЕ В USER НИЧЕГО НЕ ЗАХОДИТ, ПОЭТОМУ ОН И НЕ МОЖЕТ ОПРЕДЕЛИТЬ РОЛЬ
{
Label1.Visible = true;
Response.Write("Администратор");
}
{
Label1.Visible = true;
Response.Write("Администратор");
}
т.е. в User ничего нету
Цитата: Proximus
я посмарел... и кстати хочу заметить что роли хранятся у меня не в БД, а создавал на веб-узле.
Если пользователи у вас в БД, то и роли храните в БД.
просто по заданию лабораторной надо создавать на веб-узле, с БД не связывать роли пользователей
там где страница Авторизации с эл.упр-я Login, пишите в событии
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
if (Membership.ValidateUser(Login1.UserName, Login1.Password))
e.Authenticated = true;
}
потом в web.config напишите:
Код:
<connectionStrings>
<add name="SqlServices" connectionString="Data Source=localhost; Integrated Security=SSPI; Initial Catalog=ASPBASE_9lab"/>
</connectionStrings>
<system.web>
<roleManager cacheRolesInCookie="true" enabled="true" defaultProvider="SqlRoleManager" cookieName=".ASPRoles">
<providers>
<add name="SqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlServices"
applicationName="/" />
</providers>
</roleManager>
<profile enabled="true" defaultProvider="ASPProfileProvider" automaticSaveEnabled="false">
<providers>
<add name="ASPProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="SqlServices"/>
</providers>
<properties>
<add name="LastName" type="string" defaultValue=""/>
<add name="FirstName" type="string" defaultValue=""/>
<add name="Age" type="int" defaultValue="0"/>
</properties>
</profile>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<clear/>
<add name="SqlProvider" enablePasswordRetrieval="false" enablePasswordReset="true" passwordFormat="Hashed"
requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" requiresQuestionAndAnswer="true"
type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlServices"
minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"
applicationName="/"/>
</providers>
</membership>
<authentication mode="Forms">
<forms cookieless="UseCookies" protection="All" loginUrl="~/Login.aspx" name=".ASPAuthCookie" slidingExpiration="true" timeout="180"/>
<add name="SqlServices" connectionString="Data Source=localhost; Integrated Security=SSPI; Initial Catalog=ASPBASE_9lab"/>
</connectionStrings>
<system.web>
<roleManager cacheRolesInCookie="true" enabled="true" defaultProvider="SqlRoleManager" cookieName=".ASPRoles">
<providers>
<add name="SqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlServices"
applicationName="/" />
</providers>
</roleManager>
<profile enabled="true" defaultProvider="ASPProfileProvider" automaticSaveEnabled="false">
<providers>
<add name="ASPProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="SqlServices"/>
</providers>
<properties>
<add name="LastName" type="string" defaultValue=""/>
<add name="FirstName" type="string" defaultValue=""/>
<add name="Age" type="int" defaultValue="0"/>
</properties>
</profile>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<clear/>
<add name="SqlProvider" enablePasswordRetrieval="false" enablePasswordReset="true" passwordFormat="Hashed"
requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" requiresQuestionAndAnswer="true"
type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlServices"
minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"
applicationName="/"/>
</providers>
</membership>
<authentication mode="Forms">
<forms cookieless="UseCookies" protection="All" loginUrl="~/Login.aspx" name=".ASPAuthCookie" slidingExpiration="true" timeout="180"/>
Цитата: Proximus
нашел решение своей проблемы!
там где страница Авторизации с эл.упр-я Login, пишите в событии
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
if (Membership.ValidateUser(Login1.UserName, Login1.Password))
e.Authenticated = true;
}
там где страница Авторизации с эл.упр-я Login, пишите в событии
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
if (Membership.ValidateUser(Login1.UserName, Login1.Password))
e.Authenticated = true;
}
Это совсем не обязательно.
Цитата: Proximus
потом в web.config напишите:
Код:
<roleManager cacheRolesInCookie="true" enabled="true" defaultProvider="SqlRoleManager" cookieName=".ASPRoles">
<providers>
<add name="SqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlServices"
applicationName="/" />
</providers>
</roleManager>
<providers>
<add name="SqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlServices"
applicationName="/" />
</providers>
</roleManager>
Вот теперь вы храните роли в БД.