Problema com perfil
Quando logo no site sempre aparece a ultima pagina inclusive quando o perfil logado não da acesso a mesma.
Asp.net 2
Ademilso Peres
Curtidas 0
Respostas
Fabio Mans
14/02/2010
Olá, como você fez a autenticação? Post seu código.
Obrigado.
Fabio
Obrigado.
Fabio
GOSTEI 0
Fabio Mans
14/02/2010
Conseguiu resolver?
GOSTEI 0
Ademilso Peres
14/02/2010
<authorization>
<allow roles="Representante"/>
<allow roles="Vendedor"/>
<allow roles="Gerente"/>
<allow roles="Especialista"/>
<allow roles="Administrador"/>
<allow roles="AdmVendas"/>
<allow roles="Diretor"/>
<deny users="*"/>
</authorization>
<authentication mode="Forms">
<forms cookieless="AutoDetect" name="SecureWeb" loginUrl="~/Login.aspx"/>
</authentication>
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="LocalSqlServer"
applicationName="/" enablePasswordRetrieval="true"
enablePasswordReset="false"
requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Encrypted" maxInvalidPasswordAttempts="25" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="6"/>
</providers>
</membership>
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
if (Membership.ValidateUser(Login1.UserName, Login1.Password))
e.Authenticated = true;
else
e.Authenticated = false;
if (e.Authenticated)
{
if (System.Web.Security.Roles.IsUserInRole(Login1.UserName, "Vendedor"))
{
Session["Papel"] = "Vendedor";
}
else if (System.Web.Security.Roles.IsUserInRole(Login1.UserName, "Gerente"))
{
Session["Papel"] = "Gerente";
}
else if (System.Web.Security.Roles.IsUserInRole(Login1.UserName, "Especialista"))
{
Session["Papel"] = "Especialista";
}
else if (System.Web.Security.Roles.IsUserInRole(Login1.UserName, "Administrador"))
{
Session["Papel"] = "Administrador";
}
else if (System.Web.Security.Roles.IsUserInRole(Login1.UserName, "AdmVendas"))
{
Session["Papel"] = "AdmVendas";
}
else if (System.Web.Security.Roles.IsUserInRole(Login1.UserName, "Diretor"))
{
Session["Papel"] = "Diretor";
}
else if (System.Web.Security.Roles.IsUserInRole(Login1.UserName, "Representante"))
{
Session["Papel"] = "Representante";
}
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, false);
}
GOSTEI 0
Fabio Mans
14/02/2010
Está certinho, o que faria de diferente é não ficar criando todas estas Sessions, por que faz isso?
GOSTEI 0
Ademilso Peres
14/02/2010
Fiz isso para poder saber qual é o papel do usuário. Existe forma melhor? Agora é quanto ao meu problema voce teria alguma ideia do que pode ser?
GOSTEI 0
Fabio Mans
14/02/2010
Você não precisa ficar criando Session, esta informação está no cookie, para saber, basta utilizar o método IsInRole
if (User.IsInRole("Gerete"))
{
//Faz alguma coisa
}
Pelo que eu estou vendo você está dando permissão para todos no Web.Config
Separe por pastas.
Por exemplo, caso queira que só gerentes acesse, crie uma pasta e coloque um Web.Config nesta pasta como no exemplo abaixo.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="Gerente" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
Assim resolvemos o problema de ver sem permissão, sobre a abertura da página quem controla isso é o ASP.NET, veja em negrito
http://localhost:6859/GrupoSBF.Endocom.AgenteComunicacao/Autenticacao.aspx?ReturnUrl=%2fGrupoSBF.Endocom.AgenteComunicacao%2fDefault.aspx.
Caso queira fazer manualmente, segue um exemplo.
//se o usuário acessou diretamente Login.aspx transfere
//a aplicação para Default.aspx
string urlRedirecionamento;
if (Request.QueryString["ReturnURL"] == null)
{
urlRedirecionamento = "~/Default.aspx";
}
else
{
urlRedirecionamento = Request.QueryString["ReturnURL"].ToString();
}
Response.Redirect(urlRedirecionamento);
Fabio
if (User.IsInRole("Gerete"))
{
//Faz alguma coisa
}
Pelo que eu estou vendo você está dando permissão para todos no Web.Config
Separe por pastas.
Por exemplo, caso queira que só gerentes acesse, crie uma pasta e coloque um Web.Config nesta pasta como no exemplo abaixo.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="Gerente" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
Assim resolvemos o problema de ver sem permissão, sobre a abertura da página quem controla isso é o ASP.NET, veja em negrito
http://localhost:6859/GrupoSBF.Endocom.AgenteComunicacao/Autenticacao.aspx?ReturnUrl=%2fGrupoSBF.Endocom.AgenteComunicacao%2fDefault.aspx.
Caso queira fazer manualmente, segue um exemplo.
//se o usuário acessou diretamente Login.aspx transfere
//a aplicação para Default.aspx
string urlRedirecionamento;
if (Request.QueryString["ReturnURL"] == null)
{
urlRedirecionamento = "~/Default.aspx";
}
else
{
urlRedirecionamento = Request.QueryString["ReturnURL"].ToString();
}
Response.Redirect(urlRedirecionamento);
Fabio
GOSTEI 0
Ademilso Peres
14/02/2010
Estou tentando criar essas subpastas mas estou com problemas. Como eu devo configurar essas sub-pastas no iis? Devo criar pasta virtual ou não?
GOSTEI 0
Fabio Mans
14/02/2010
Não no IIS, na sua aplicação mesmo. Veja a tela abaixo, veja que eu separo Agente e Publicados, são usuários com Roles diferentes. Na pasta agente eu coloco o Web.Config abaixo, assim o Publicador não acessa.
Espero ter ajudado.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="Agente" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
<system.web>
<authorization>
<allow roles="Agente" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
GOSTEI 0
Ademilso Peres
14/02/2010
Tenho outra duvida relacionada se voce achar que devo abrir um novo chamado fique a vontade para faze-lo.
Coloquei um formulario na pasta "Administrador" mas estou tendo um problema com arquivos sitemap que estou usando para montar o menu seque o abaixo o fonte dos arquivos e tambem uma classe que uso para criar o menu a
partir do perfil.
Quando clico na opção "CamadaPadrão" da o seguinte erro:
Could not find the sitemap node with URL 'Administrador'.
arquivo web.sitemap
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="Default.aspx" title="Menu Principal">
<siteMapNode siteMapFile="Representante.sitemap"/> <siteMapNode siteMapFile="Diretor.sitemap"/>
<siteMapNode siteMapFile="AdmVendas.sitemap"/>
<siteMapNode siteMapFile="Vendedor.sitemap"/>
<siteMapNode siteMapFile="Gerente.sitemap"/>
<siteMapNode siteMapFile="Especialista.sitemap"/>
<siteMapNode siteMapFile= "Administrador.sitemap"/>
</siteMapNode>
</siteMap>
arquivo administrador.sitemap <?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="Administrador">
<siteMapNode url="UsuarioListar.aspx" title="Usuário"/> <siteMapNode url="TrocarSenha.aspx" title="Trocar Senha" description="" />
<siteMapNode url="Camadas.aspx" title="Camadas" description="" />
<siteMapNode url="~\Administrador\CamadaPadrao.aspx" title="Camada padrão"/>
<siteMapNode url="ImportarMaterialMaster.aspx" title="Determinar Reference Price" description="" />
<siteMapNode url="Impostos.aspx" title="Impostos"/>
<siteMapNode url="Deflator.aspx" title="Deflator"/>
<siteMapNode url="VerificarControle.aspx" title="Verificar Controle"/> <siteMapNode url="SBF.aspx" title="SBF" description="" />
<siteMapNode url="Equipamento.aspx" title="Equipamento" description="" />
<siteMapNode url="UnidadeBasica.aspx" title="Unidade básica" description="" />
<siteMapNode url="ConfiguracaoProduto.aspx" title="Configuração de produto" description="" />
<siteMapNode url="AcessoriosExtras.aspx" title="Acessorios Extras" description="" />
<siteMapNode url="OportunidadeListar.aspx" title="Oportunidade" description="" />
<siteMapNode url="ImprimirProposta.aspx" title="Imprimir proposta" description="" />
<siteMapNode url="PropostasEnviadas.aspx" title="Propostas enviadas" description="" />
</siteMapNode>
</siteMap> public static SiteMapDataSource GetSiteMapDataSource(string profile) { // varivel para armazenar a URL do n principal do menu string URL = String.Empty; // define a URL de acordo com o parmetro PROFILE URL = profile; // cria o objeto XmlSiteMapProvider que ser utilizado para construir // o SiteMap dinamicamente. XmlSiteMapProvider xmlSiteMap = new XmlSiteMapProvider(); System.Collections.Specialized.NameValueCollection MySiteMap = new System.Collections.Specialized.NameValueCollection(1); MySiteMap.Add("siteMapFile", "Web.sitemap"); // inicializa o novo objeto SiteMapProvider xmlSiteMap.Initialize("MyProvider", MySiteMap); xmlSiteMap.BuildSiteMap(); // cria o DataSource para o objeto SiteMap SiteMapDataSource siteMap = new SiteMapDataSource(); // atribui o n principal de acordo com o perfil do usurio siteMap.StartingNodeUrl = URL; // oculta o n principal (opcional) siteMap.ShowStartingNode = false; // retorna o objeto para o procedimento de chamada return siteMap; }
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="Default.aspx" title="Menu Principal">
<siteMapNode siteMapFile="Representante.sitemap"/> <siteMapNode siteMapFile="Diretor.sitemap"/>
<siteMapNode siteMapFile="AdmVendas.sitemap"/>
<siteMapNode siteMapFile="Vendedor.sitemap"/>
<siteMapNode siteMapFile="Gerente.sitemap"/>
<siteMapNode siteMapFile="Especialista.sitemap"/>
<siteMapNode siteMapFile= "Administrador.sitemap"/>
</siteMapNode>
</siteMap>
arquivo administrador.sitemap <?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="Administrador">
<siteMapNode url="UsuarioListar.aspx" title="Usuário"/> <siteMapNode url="TrocarSenha.aspx" title="Trocar Senha" description="" />
<siteMapNode url="Camadas.aspx" title="Camadas" description="" />
<siteMapNode url="~\Administrador\CamadaPadrao.aspx" title="Camada padrão"/>
<siteMapNode url="ImportarMaterialMaster.aspx" title="Determinar Reference Price" description="" />
<siteMapNode url="Impostos.aspx" title="Impostos"/>
<siteMapNode url="Deflator.aspx" title="Deflator"/>
<siteMapNode url="VerificarControle.aspx" title="Verificar Controle"/> <siteMapNode url="SBF.aspx" title="SBF" description="" />
<siteMapNode url="Equipamento.aspx" title="Equipamento" description="" />
<siteMapNode url="UnidadeBasica.aspx" title="Unidade básica" description="" />
<siteMapNode url="ConfiguracaoProduto.aspx" title="Configuração de produto" description="" />
<siteMapNode url="AcessoriosExtras.aspx" title="Acessorios Extras" description="" />
<siteMapNode url="OportunidadeListar.aspx" title="Oportunidade" description="" />
<siteMapNode url="ImprimirProposta.aspx" title="Imprimir proposta" description="" />
<siteMapNode url="PropostasEnviadas.aspx" title="Propostas enviadas" description="" />
</siteMapNode>
</siteMap> public static SiteMapDataSource GetSiteMapDataSource(string profile) { // varivel para armazenar a URL do n principal do menu string URL = String.Empty; // define a URL de acordo com o parmetro PROFILE URL = profile; // cria o objeto XmlSiteMapProvider que ser utilizado para construir // o SiteMap dinamicamente. XmlSiteMapProvider xmlSiteMap = new XmlSiteMapProvider(); System.Collections.Specialized.NameValueCollection MySiteMap = new System.Collections.Specialized.NameValueCollection(1); MySiteMap.Add("siteMapFile", "Web.sitemap"); // inicializa o novo objeto SiteMapProvider xmlSiteMap.Initialize("MyProvider", MySiteMap); xmlSiteMap.BuildSiteMap(); // cria o DataSource para o objeto SiteMap SiteMapDataSource siteMap = new SiteMapDataSource(); // atribui o n principal de acordo com o perfil do usurio siteMap.StartingNodeUrl = URL; // oculta o n principal (opcional) siteMap.ShowStartingNode = false; // retorna o objeto para o procedimento de chamada return siteMap; }
GOSTEI 0
Ademilso Peres
14/02/2010
Complementando quando clico em "CamadaPadrao" a pagina aparece mas o referido erro ocorre quando minha rotina tenta remontar o menu.
GOSTEI 0
Fabio Mans
14/02/2010
Cada site só pode ter um menu, faz assim.
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/" title="" description="">
<siteMapNode url="~/Default.aspx" title="Agente de comunicação" description="Página principal" />
<siteMapNode url="~/Publicador/CadastrarAgente.aspx" title="Agentes" description="Consultar, excluir e cadastrar agentes ou publicadores" roles="Publicador" />
<siteMapNode url="~/Publicador/CadastrarPublicacao.aspx" title="Cadastrar publicação" description="Novas publicações" roles="Publicador" />
<siteMapNode url="~/Publicador/ObterPublicacoes.aspx" title="Publicações (Publicador)" description="Lista com todas publicações ativas" roles="Publicador" />
<siteMapNode url="~/Agente/ObterAgentePublicacoes.aspx" title="Publicações" description="Lista com todas publicações ativas" roles="Agente" />
</siteMapNode>
</siteMap>
Você coloca a roles no menu, assim apareceu ou não, dependendo do perfil
No Web.Config configure como no exemplo abaixo.
<siteMap defaultProvider="Agente_SiteMapProvider" enabled="true">
<providers>
<add name="Agente_SiteMapProvider" type="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true" siteMapFile="Web.sitemap"/>
</providers>
</siteMap>
Estude sobre os ítens em negrito, são interessantes.
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/" title="" description="">
<siteMapNode url="~/Default.aspx" title="Agente de comunicação" description="Página principal" />
<siteMapNode url="~/Publicador/CadastrarAgente.aspx" title="Agentes" description="Consultar, excluir e cadastrar agentes ou publicadores" roles="Publicador" />
<siteMapNode url="~/Publicador/CadastrarPublicacao.aspx" title="Cadastrar publicação" description="Novas publicações" roles="Publicador" />
<siteMapNode url="~/Publicador/ObterPublicacoes.aspx" title="Publicações (Publicador)" description="Lista com todas publicações ativas" roles="Publicador" />
<siteMapNode url="~/Agente/ObterAgentePublicacoes.aspx" title="Publicações" description="Lista com todas publicações ativas" roles="Agente" />
</siteMapNode>
</siteMap>
Você coloca a roles no menu, assim apareceu ou não, dependendo do perfil
No Web.Config configure como no exemplo abaixo.
<siteMap defaultProvider="Agente_SiteMapProvider" enabled="true">
<providers>
<add name="Agente_SiteMapProvider" type="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true" siteMapFile="Web.sitemap"/>
</providers>
</siteMap>
Estude sobre os ítens em negrito, são interessantes.
GOSTEI 0
Fabio Mans
14/02/2010
Posso fechar o chamado?
GOSTEI 0
Ademilso Peres
14/02/2010
sim, estou com outro problema e abri outro chamado para isso, um outro consultor pegou mas acredito que ele não vai ajudar muito neste caso. Eu vou criar outro chamado com o mesmo problema favor veja se voce pode me ajudar.
GOSTEI 0
Fabio Mans
14/02/2010
Qualquer dúvida o moderador altera o chamado para o meu nome, vamos aguardar.
Obrigado.
GOSTEI 0