Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация в ASP.NET, Настройка доступа для ролей 
V
    Опции темы
Magnetic
Дата 1.4.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 11.11.2006

Репутация: 1
Всего: 1



Код из Global.asax:
Код

...
void Application_AuthorizeRequest(Object sender, EventArgs e)
{
...
Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, new string[] { "User" });
...
}


web.config
Код

<deny roles="User"/>
<deny users="?"/>


Анонимный пользователь не имеет доступа к ресурсам с указаными настройками, после авторизации пользователь получает роль "User", но все равно имеет доступ. Насколько я понимаю, то не должен. Или роли в конфиге и роли, которые передаются методу из первого примера кода, это разные понятия? На странице, к которой не должно быть доступа для роли "User"
Код

Context.User.IsInRole("User")

возвращает True. Объясните, пожалуйста, соответствуют ли роли в конфиге ролям объекта Contex.User, если да то почему не срабатывает запрет доступа в конфиге?
--------------------
Dude, where's my car?
PM MAIL   Вверх
Zakonnic
Дата 1.4.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 25.4.2006

Репутация: 3
Всего: 6



Хм. Как-то это не правильно все. Роли в конфиге - это роли в AD, а тут какое-то левое приложение возьмет, да и наградит пользователя мегаролью. Пусть даже в рамках этого приложения, но это выглядит... странно. Это не путь майкрософта smile

Короче, похоже, что код 
Код
new System.Security.Principal.GenericPrincipal(Context.User.Identity, new string[] { "User" })
 делает не совсем то, что хотелось бы.
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
stereon
Дата 2.4.2008, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.2.2005

Репутация: нет
Всего: нет



Код

    void Application_AuthenticateRequest(Object sender, EventArgs e)
    {        
        if (Context.Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            // Извлекаем куку с аутентификационными данными
            HttpCookie cookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];

            // Дешифруем ее в тикет
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);

            // Создаем пользовательский контекст
            FormsIdentity identity = new FormsIdentity(ticket);

            AuthCookieParce Parsing = new AuthCookieParce(); //Просто мой класс который парсит строку которую я бросай в куки
            Parsing.Parse(identity.Name);                                    //чаще всего это бывает IP, логин,роль и просто мусор

            System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(identity, new string[] { Parsing.UserRole });

            // Клеим его к текущему HTTP-контексту
            Context.User = principal;
        }
    }



и в веб конфиге попробуй сделать так

Код

      <authorization>
        <allow roles="Adminsl"/>
        <deny  users="*"/>
      </authorization>


Удачи
PM MAIL   Вверх
Magnetic
Дата 2.4.2008, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 11.11.2006

Репутация: 1
Всего: 1



stereon, спасибо! По твоему коду понял, что обрабатываю не то событие. Все что нужно было сделать - в Global.asax заменить
Код

void Application_AuthorizeRequest(Object sender, EventArgs e)

на
Код

void Application_AuthenticateRequest(Object sender, EventArgs e)

--------------------
Dude, where's my car?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0729 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.