Fórum Problema com perfil #15709

14/02/2010

0

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

Ademilso Peres

Responder

Posts

17/02/2010

Fabio Mans

Olá, como você fez a autenticação? Post seu código.

Obrigado.

Fabio
Responder

Gostei + 0

18/02/2010

Fabio Mans

Conseguiu resolver?
Responder

Gostei + 0

20/02/2010

Ademilso Peres

<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); }
Responder

Gostei + 0

24/02/2010

Fabio Mans

Está certinho, o que faria de diferente é não ficar criando todas estas Sessions, por que faz isso?
Responder

Gostei + 0

26/02/2010

Ademilso Peres

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?
Responder

Gostei + 0

26/02/2010

Fabio Mans

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
Responder

Gostei + 0

08/03/2010

Ademilso Peres

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?   
Responder

Gostei + 0

08/03/2010

Fabio Mans

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>
Responder

Gostei + 0

09/03/2010

Ademilso Peres

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; }
           
Responder

Gostei + 0

09/03/2010

Ademilso Peres

Complementando quando clico em "CamadaPadrao" a pagina aparece mas o referido erro ocorre quando minha rotina tenta remontar o menu. 
Responder

Gostei + 0

09/03/2010

Fabio Mans

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.

Responder

Gostei + 0

15/03/2010

Fabio Mans

Posso fechar o chamado?
Responder

Gostei + 0

16/03/2010

Ademilso Peres

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. 
Responder

Gostei + 0

16/03/2010

Fabio Mans

Qualquer dúvida o moderador altera o chamado para o meu nome, vamos aguardar.   Obrigado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar