Implementar um provedor de função
Gerenciamento de funções ASP.NET permite que você facilmente usar um número de diferentes provedores para seus aplicativos ASP.NET.Você pode usar os provedores de perfil fornecidos com o .NET Framework, ou você pode implementar seu próprio provedor.
Existem dois principais motivos para criar um provedor de função personalizado.
Você precisará armazenar as informações da função em uma fonte de dados que não é suportada pelos provedores de função incluídos no .NET Framework, como um banco de dados FoxPro, um banco de dados Oracle, ou outra fonte de dados.
Você precisará gerenciar informações da função usando um esquema de banco de dados que seja diferente do esquema do banco de dados usado pelos provedores fornecidos com o .NET Framework.Um exemplo comum deste seria os dados de autorização que já existem em um banco de dados SQL Server para uma empresa ou site.
Classes Necessárias
Para implementar um provedor de função, crie uma classe que herda da classe abstrata RoleProvider do namespace System.Web.Security.A classe abstrata RoleProvider herda a classe abstrata ProviderBase do namespace System.Configuration.Provider.Como resultado, você deve implementar os membros necessários da classe ProviderBase assim.As tabelas a seguir listam as propriedades e métodos necessários que devem ser implementadas das classes abstratas ProviderBase e RoleProvider e uma descrição de cada uma.Para revisar uma implementação de cada membro, consulte o código fornecido em Implementando o exemplo do provedor de função.
Membros ProviderBase
Membro |
Descrição |
---|---|
Método Initialize |
Takes as input the name of the provider and a NameValueCollection of configuration settings.Utilizado para definir os valores das propriedade para a instância do provedor incluindo valores específicos da implementação e opções especificadas no arquivo de configuração (Machine.config ou Web.config). |
Membros do RoleProvider
Membro |
Descrição |
---|---|
Propriedade ApplicationName |
O nome do aplicativo usa as informações da função especificada no arquivo de configuração (Web.config).O ApplicationName é armazenado na fonte de dados com informações do usuário relacionados e usadas quando ocorrem consultas a informações do usuário.Consulte a seção em ApplicationName neste tópico para obter mais informações. Esta propriedade é leitura/gravação e o padrões é a ApplicationPath se não for especificada explicitamente. |
Método AddUsersToRoles |
Takes as input a list of user names and a list of role names, and associates the specified users with the specified roles at the data source for the configured ApplicationName. You should throw a ProviderException if any of the role names or user names specified do not exist for the configured ApplicationName. Você deve acionar uma ArgumentException se qualquer um dos nomes de usuário ou nomes de funções especificados for uma sequência de caracteres vazia e uma ArgumentNullException se qualquer um dos nomes de usuário ou nomes de função especificados for null (Nothing no Visual Basic). Se sua fonte de dados oferece suporte a transações, você deve incluir a operação de adição numa transação, e reverter a transação e enviar uma exceção se qualquer operação de adição falhar. |
Método CreateRole |
Leva como entrada o nome de uma função e adiciona a função especificada para a fonte de dados para a ApplicationName configurada. Você deve acionar uma ProviderException se o nome de função especificado já existir para o ApplicationName configurado. Você deve acionar uma ArgumentException se o nome de função especificado for uma sequência de caracteres vazia, contém uma vírgula ou excede o comprimento máximo permitido pela fonte de dados e uma ArgumentNullException se o nome de função especificado for null (Nothing no Visual Basic). |
Método DeleteRole |
Obtém como entrada o nome de uma função e um valor booleano que indica se envia uma exceção se ainda houver usuários associados à função.A DeleteRole exclui a função especificada da fonte de dados para a ApplicationName configurada. Se o parâmetro throwOnPopulatedRole é true, e a função identificada pelo parâmetro de nome de função tem um ou mais membros, acione um ProviderException e não exclua a função.Se o parâmetro throwOnPopulatedRole for false, então exclua a função se ela estiver vazia ou não. Quando você exclui uma função da fonte de dados, certifique-se que você exclua também quaisquer associações entre um nome de usuário e a função excluída para o ApplicationName configurado. Você deve acionar uma ArgumentException se o nome de função especificado não existe, ou é uma sequência vazia.Você deve acionar uma ArgumentNullException se o nome de função especificado for null (Nothing no Visual Basic). |
Método FindUsersInRole |
Leva como entrada um nome de função e um nome de usuário para procurar e retorna uma lista de usuários em uma função onde o nome de usuário contém uma correspondência de usernameToMatch fornecido para o ApplicationName configurado.Por exemplo, se o parâmetroemailToMatch for definido como " Address@example.com ", os usuários com o endereço de email " address1@example.com, " " address2@example.com ", e assim por diante são retornados.O suporte ao caractere curinga é incluído com base na fonte de dados.Os usuários são retornados em ordem alfabética por nome de usuário. É recomendável que você acione uma ProviderException se o nome de função especificado não existir na fonte de dados. |
Método GetAllRoles |
Retorna uma lista de nomes da função da fonte de dados.Somente as funções para o ApplicationName especificado são recuperadas. Se nenhuma função existir para o ApplicationName configurado, você deve retornar um matriz de sequências de caracteres com nenhum elemento. |
Método GetRolesForUser |
Obtém como entrada um nome de usuário e retorna os nomes das funções que o usuário especificado está associado, a partir da fonte de dados.Somente as funções para o ApplicationName configurado são recuperadas. Se nenhuma função existir para o ApplicationName configurado, você deve retornar um matriz de sequências de caracteres com nenhum elemento. Você deve acionar uma ArgumentException se o nome de usuário especificado for uma sequência de caracteres vazia.Você deve acionar uma ArgumentNullException se o nome de função especificado for null (Nothing no Visual Basic). |
Método GetUsersInRole |
Obtém como entrada um nome de função e retorna os nomes de usuário associados a uma função da fonte de dados.Somente as funções para o ApplicationName configurado são recuperadas. Se o nome de função especificado não existe para a ApplicationName configurada, você deve lançar uma ProviderException. Se nenhum usuário estiver associado com a função especificada para o ApplicationName configurado, você deve retornar um matriz de sequências de caracteres com nenhum elemento. Você deve exibir uma ArgumentException se o nome da função especificada for uma sequência vazia, contiver uma vírgula ou exceder o comprimento máximo permitido para um nome da função pela sua fonte de dados.Você deve acionar uma ArgumentNullException se o nome de função especificado for null (Nothing no Visual Basic). |
Método IsUserInRole |
Utiliza como entrada um nome de usuário e um nome de função e determina se o usuário com logon feito atual está associado com uma função a partir de fonte de dados para a ApplicationName configurado. Você deve lançar uma ProviderException se o nome de função ou o nome de usuário especificado não existir para o ApplicationName configurado. Você deve acionar uma ArgumentException se o nome de usuário ou nome da função especificado é uma sequência de caracteres vazia e uma ArgumentNullException se o nome de usuário ou nome de função especificado for null (Nothing no Visual Basic). |
Método RemoveUsersFromRoles |
Utiliza como entrada uma lista de nomes de usuário e uma lista de função nomes e remove as funções especificadas no fonte de dados para a ApplicationName configurado a associação para os usuários especificados. Você deve lançar uma ProviderException se quaisque dos nomes de função ou dos nomes de usuário especificados não existirem para o ApplicationName configurado. Você deve acionar uma ArgumentException se qualquer um dos nomes de usuário ou nomes de funções especificados for uma sequência de caracteres vazia e uma ArgumentNullException se qualquer um dos nomes de usuário ou nomes de função especificados for null (Nothing no Visual Basic). Se sua fonte de dados oferece suporte a transações, você deve incluir um operação de remoção em cada transação, e reverter a transação e exibir uma exceção se qualquer operação de remoção falhar. |
Método RoleExists |
Leva como entrada um função Nome e determina se o nome da função existe no fonte de dados para a ApplicationName configurado. Você deve acionar uma ArgumentException se o nome de função especificado não existe, ou é uma sequência vazia.É recomendável que você acione uma ArgumentNullException se o nome de função especificado for null (Nothing no Visual Basic). |
Nome do Aplicativo
Os provedores de função armazenam informações exclusivamente para cada aplicativo.Isso permite que vários aplicativos ASP.NET usem a mesma fonte de dados sem executar em conflito, se forem usados nomes duplicados.Como alternativa, vários aplicativos ASP.NET podem usar a mesma fonte de dados de funções, especificando o mesmo ApplicationName.
Como provedores de função armazenam informações exclusivamente da função para cada aplicativo, será necessário para garantir que o esquema de dados inclua o nome do aplicativo e que as consultas e atualizações também incluam o nome do aplicativo.Por exemplo, o comando a seguir é usado para recuperar um nome de função de um banco de dados e garante que o ApplicationName está incluído na consulta.
SELECT Rolename FROM Roles
WHERE Rolename = 'Administrators' AND ApplicationName = 'MyApplication'
Acesso thread-safe
Para cada provedor de função especificado na configuração de um aplicativo, o ASP.NET instancia uma única instância do provedor de associação que é usada para todas as solicitações servidas por um objeto HttpApplication.Como resultado, você pode ter várias solicitações em execução simultaneamente.O ASP.NET não garante a segurança de segmentos das chamadas para o seu provedor.Você precisará escrever seu código de provedor para segurança de segmento.Por exemplo, criar uma conexão com um banco de dados ou abrir um arquivo para edição deve ser feita dentro do membro que é chamado, como AddUsersToRoles,em vez de abrir um arquivo ou conexão de banco de dados quando o método Initialize é chamado.
Consulte também
Conceitos
Implementando o exemplo do provedor de função