Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверка ролей у пользователей

54K
11 апреля 2010 года
Proximus
11 / / 11.04.2010
Привет!
Мой вопрос в принципе не вызывает особой сложности. Дело в том, что нужно проверить роли у каждого авторизованного пользователя на моем ASP.nET 2.0 сайте. Есть один Админ, ну и все остальные - это юзеры. Проблема заключается в том, что почему-то не работает эта самая проверка ролей у авторизованных пользователей.(

что я делаю..

1. прописал в Web.config - разрешение на упр-е ролями
 
Код:
[XML]
<roleManager enabled="true"></roleManager>
[/XML]


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]


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]


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]


7. да и кстати у LoginView в представлении я выбираю по умолчанию из 2 ролей : первую роль, та что Roles[0] - Administrator (все это делаю в дизайнере формы)

p.s. вообщем роли никак не определяются для юзеров, кто бы это не был...(( жду ваших комментов и еще раз говорю, что Роли делали сам, через LoginView зашел в "Администрировать веб-узел" и там добавил их.
5
11 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Настройте провайдер ролей (Шаг 2).
54K
11 апреля 2010 года
Proximus
11 / / 11.04.2010
я посмарел... и кстати хочу заметить что роли хранятся у меня не в БД, а создавал на веб-узле.

в примере я в принципе сделал основное что нужно было, в итоге получилось вот так:

Код:
<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>


но толка от этого никакого, по-прежнему не определяются роли... вот где я проверяю те самые роли:

 
Код:
if (Context.User.IsInRole("Administrator")) // ВООБЩЕ В USER НИЧЕГО НЕ ЗАХОДИТ, ПОЭТОМУ ОН И НЕ МОЖЕТ ОПРЕДЕЛИТЬ РОЛЬ
            {
                Label1.Visible = true;
                Response.Write("Администратор");
            }


т.е. в User ничего нету
5
12 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Proximus
я посмарел... и кстати хочу заметить что роли хранятся у меня не в БД, а создавал на веб-узле.

Если пользователи у вас в БД, то и роли храните в БД.

54K
12 апреля 2010 года
Proximus
11 / / 11.04.2010
роли храню я на ВЕБ-УЗЛЕ!!!!!!! В БД НЕ ХРАНЮ!!!!!
просто по заданию лабораторной надо создавать на веб-узле, с БД не связывать роли пользователей
54K
14 апреля 2010 года
Proximus
11 / / 11.04.2010
нашел решение своей проблемы!

там где страница Авторизации с эл.упр-я 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"/>
5
15 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Proximus
нашел решение своей проблемы!

там где страница Авторизации с эл.упр-я 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>


Вот теперь вы храните роли в БД.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог