Depois que o ASP.net 2.0 foi lançado, sempre quis usar o Membership 2.0, que é uma ferramenta de gerenciamento de permissões de sites bem compactada. Usei SQLProvider, usei aspnet_regsql para gerar as tabelas necessárias e configurei o web.config. No entanto, encontrei muitos problemas no uso real, incluindo obter o usuário conectado no momento por meio de Membership.GetUser() após o login. para mim era nulo... As configurações de autenticação e autorização incluídas no webconfig pareciam não ter efeito algum. Depois de algumas pesquisas, ainda não consegui resolver esse problema, então não tive escolha a não ser usar a associação, mas implementei o. todo o processo de autenticação e autorização por si só.
Como o controle de login não funcionou, eu mesmo escrevi uma página login.aspx. Esta página usa a função Membership.ValidateUser() para avaliar o login do usuário. Depois que o usuário faz login com sucesso, o nome de usuário do usuário é salvo na sessão.
Implementei um objeto configurável serializado XML, que possui a seguinte estrutura
<?xml version="1.0"?>
<SecurityConfig xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd=" http://www.w3.org/2001/XMLSchema ">
<Locais da página>
<PageLocation Location="~/admin/admin/RoleManager.aspx">
<Permitir funções="Administrador" />
</PageLocation>
</PageLocations>
</SecurityConfig>
PageLocations é uma coleção de objetos List de PageLocation. O local em Pagelocation contém a página à qual as permissões devem ser adicionadas. Pagelocation contém um objeto Allow, um dos quais é Roles, que contém as funções de usuário que podem ser autorizadas pela página. Elas podem ser separadas por vírgulas, para que todas as páginas sejam adicionadas a esta estrutura XML.
Em seguida, implemente a seguinte função:
/// <summary>
/// Se o acesso a esta página é permitido
/// </sumário>
/// <param name="url">Caminho autorizado</param>
/// <param name="rolenames">Funções de autorização</param>
/// <returns>Se autorizado</returns>
public bool isAllow(Uri url,string[] nomes de papéis,contexto HttpContext)
{
string path=context.Server.MapPath(url.AbsolutePath);
PageLocation theLocation = null;
foreach (localização de PageLocation em pageLocations)
{
localização de string;
strlocation=context.Server.MapPath(location.Location);
if (strlocation.ToLower() == caminho.ToLower())
{
theLocation = localização;
}
}
if (theLocation! = Nulo)
{
string[] papéis = theLocation.Allow.Roles.Split(',');
foreach (função de string em funções)
{
foreach (string rolename em rolenames)
{
if (nome da função == função)
{
retornar verdadeiro;
}
}
}
retornar falso;
}
outro
{
retornar falso;
}
}
Comparando o caminho absoluto da página atualmente visitada com o caminho absoluto em xml e, em seguida, obtendo o objeto Pagelocation descrito em xml, para determinar se sua função Permitir corresponde à função do usuário atual. Implemente a autorização de segurança da função.
Como meu gerenciamento é usado para gerenciamento de segurança em segundo plano, escrevi um controle de usuário para encapsular a classe SecurityConfig, obter a conta do usuário logado por meio de Context.Session[] e, em seguida, obter o login por meio de Roles.GetRolesForUser(username) A função do usuário e, em seguida, passe Context.Request.Url e funções para a função agora mesmo. Se o usuário estiver autorizado, a página atual será exibida, caso contrário, ele irá para sua própria página de login ou avisará que você não tem essa permissão. .
Como uso MasterPage, neste caso só preciso vincular esse controle à masterpage, para que cada página fique sob gerenciamento, e escrever uma página em segundo plano que edite e serialize o objeto SecurityConfig. Isso obtém controle de permissão para todas as páginas.
Adotar este método também é uma boa ideia quando Membership não está funcionando. Dessa forma, ele não apenas aproveita as funções básicas fornecidas por Membership para usuários como CreateUser e CreateRoles, mas também atende à necessidade de configurações de permissão. única maneira de lidar com isso agora.
Esta é a primeira vez que posto na página inicial e espero que alguém possa me dizer em que circunstâncias a autorização .net não funcionará.
http://www.cnblogs.com/livesite/archive/2006/08/14/membership.html