После выхода ASP.net 2.0 я всегда хотел использовать Membership 2.0, который представляет собой хорошо упакованный инструмент управления разрешениями для веб-сайтов. Я использовал SQLProvider, aspnet_regsql для создания необходимых таблиц и настроил web.config. Однако при реальном использовании я столкнулся со многими проблемами, включая получение текущего вошедшего в систему пользователя через Membership.GetUser() после входа в систему. , возвращаемый код результата. для меня было нулевым... Настройки аутентификации и авторизации, включенные в веб-конфигурацию, похоже, вообще не имели никакого эффекта. После некоторых поисков я все еще не смог решить эту проблему, поэтому у меня не было другого выбора, кроме как использовать членство, но реализовало. весь процесс аутентификации и авторизации сам по себе.
Поскольку контроль входа в систему не работал, я сам написал страницу login.aspx. Эта страница использует функцию Membership.ValidateUser() для оценки входа пользователя. После успешного входа в систему имя пользователя сохраняется в сеансе.
Я реализовал сериализованный настраиваемый объект XML, который имеет следующую структуру
<Местоположения страниц>
<Разрешить роли="Администратор" />
PageLocations — это коллекция объектов List объекта PageLocation. Местоположение в Pagelocation содержит страницу, для которой необходимо добавить разрешения. Pagelocation содержит объект Allow, один из которых — Roles, содержащий роли пользователей, которые могут быть авторизованы на странице. Их можно разделить запятыми, чтобы все страницы добавлялись в эту структуру XML.
Затем реализуйте следующую функцию:
///
/// Разрешен ли доступ к этой странице
/// сводка>
/// Авторизованный путь
/// Роли авторизации
///
public bool isAllow (url Uri, строки [] имена ролей, контекст HttpContext)
{
строковый путь = context.Server.MapPath(url.AbsolutePath);
PageLocation theLocation = null;
foreach (расположение PageLocation в pageLocations)
{
строка Strlocation;
strlocation = context.Server.MapPath(location.Location);
если (strlocation.ToLower() == path.ToLower())
{
theLocation = местоположение;
}
}
если (theLocation!= ноль)
{
string[] roles = theLocation.Allow.Roles.Split(',');
foreach (строковая роль в ролях)
{
foreach (строковое имя роли в именах ролей)
{
если (имя роли == роль)
{
вернуть истину;
}
}
}
вернуть ложь;
}
еще
{
вернуть ложь;
}
}
Сравнивая абсолютный путь посещенной в данный момент страницы с абсолютным путем в XML, а затем получая объект Pagelocation, описанный в XML, чтобы определить, соответствует ли его роль Разрешить роли текущего пользователя. Реализация авторизации безопасности роли.
Поскольку мое управление используется для фонового управления безопасностью, я написал пользовательский элемент управления, чтобы инкапсулировать класс SecurityConfig, получить учетную запись вошедшего в систему пользователя через Context.Session[], а затем получить вход в систему через Roles.GetRolesForUser(username) Роль пользователя , а затем прямо сейчас передайте Context.Request.Url и роли в функцию. Если пользователь авторизован, будет отображена текущая страница. В противном случае он перейдет на его собственную страницу входа или сообщит вам, что у вас нет такого разрешения. .
Поскольку я использую MasterPage, в этом случае мне нужно только привязать этот элемент управления к главной странице, чтобы каждая страница находилась под управлением, и написать страницу в фоновом режиме, которая редактирует и сериализует объект SecurityConfig. Это обеспечивает контроль разрешений для всех страниц.
Принятие этого метода также является хорошей идеей, когда членство не работает. Таким образом, он не только использует преимущества основных функций, предоставляемых членством для пользователей, таких как CreateUser и CreateRoles, но также удовлетворяет потребности в настройках разрешений. единственный способ справиться с этим сейчас.
Это мой первый пост на главной странице, и я надеюсь, что кто-нибудь подскажет мне, при каких обстоятельствах авторизация .net не будет работать.
http://www.cnblogs.com/livesite/archive/2006/08/14/membership.html