Obteve a seguinte ProviderException :
O recurso Gerenciador de Funções não foi ativado.
Por enquanto, tudo bem.
Existe algum método que possa ser chamado para verificar se o Gerenciador de Funções foi ativado ou não?
Obteve a seguinte ProviderException :
O recurso Gerenciador de Funções não foi ativado.
Por enquanto, tudo bem.
Existe algum método que possa ser chamado para verificar se o Gerenciador de Funções foi ativado ou não?
Respostas:
Você pode fazer isso lendo a propriedade booleana em:
System.Web.Security.Roles.Enabled
Esta é uma leitura direta do enabled
atributo do roleManager
elemento no web.config
:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
Atualização: para
obter mais informações, consulte este exemplo do MSDN: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
roleManager
está ativado. Mas agora estou recebendo exceçãoUnable to connect to SQL Server database
Se você chegou aqui porque está usando o novo ASP.NET
Identity
UserManager
, o que está procurando é o seguinte RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
lhe dará acesso para ver se a função existe, cria etc., além de ser criada para o UserManager
Encontrei 2 sugestões em outro lugar do Google que sugeriam a) garantir que a cadeia de conexão db (a que as Funções estão usando) esteja correta e que a chave esteja escrita corretamente eb) que o sinalizador Ativado no RoleManager esteja definido como verdadeiro. Espero que uma dessas ajudas. Isso fez por mim.
Você tentou verificar Roles.Enabled? Além disso, você pode verificar o Roles.Providers para ver quantos fornecedores estão disponíveis e o Roles.Provider para o provedor padrão. Se for nulo, não há um.
Encontrei essa pergunta devido à exceção mencionada nela. Meu Web.Config não tinha nenhuma <roleManager>
tag. Percebi que, mesmo que eu o adicionasse (como sugeriu Infotekka ), ele acabou sendo uma exceção do banco de dados. Depois de seguir as sugestões das outras respostas aqui, nenhuma resolveu completamente o problema.
Como essas tags Web.Config podem ser geradas automaticamente, parecia errado resolvê-las adicionando-as manualmente. Se você estiver em um caso semelhante, desfaça todas as alterações feitas no Web.Config e no Visual Studio:
Verifique seu Web.config e agora você deve ter pelo menos uma <providers>
marca dentro das marcas Profile , Membership , SessionState e também dentro da nova marca RoleManager , assim:
<roleManager defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=NUMBER" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</roleManager>
Adicione enabled="true"
assim:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Pressione F6para criar e agora não há problema em prosseguir para uma atualização do banco de dados sem a exceção:
update-database -verbose
e o método Seed funcionará bem (se você não mexeu em outro lugar) e criará algumas tabelas no seu banco de dados;Se você estiver usando, ASP.NET Identity UserManager
também pode obtê-lo assim:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Se você alterou a chave do usuário de Guid para Int, por exemplo, use este código:
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());
<roleManager
enabled="true"
cacheRolesInCookie="false"
cookieName=".ASPXROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
cookieProtection="All"
defaultProvider="AspNetSqlRoleProvider"
createPersistentCookie="false"
maxCachedResults="25">
<providers>
<clear />
<add
connectionStringName="MembershipConnection"
applicationName="Mvc3"
name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add
applicationName="Mvc3"
name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
Aqui está o código que você precisa colocar no seu Controlador de conta no MVC5 e posterior para obter a lista de funções de um usuário:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
Não há necessidade de usar Roles.GetRolesForUser()
e ativar o recurso Gerenciador de funções.
web.config
? Eu tentei colocá-lo emApplication_Start
e ele dizThis method can only be called during the application's pre-start initialization phase.