Pergunta

Eu tenho um site com 2 seções - uma para os clientes e uma para administradores, em essência. Cada seção é em seu próprio diretório com a sua própria web.config e mapa do site. Segurança e acesso fina funciona.

Quando eu estou logado como administrador, eu quero ver itens de menu que apontam para a outra seção, no entanto. Eu adicionei links para o mapa do site, por exemplo:.

<siteMapNode url="~/Customer/Default.aspx?3" title="Customer Site"
description="Switch to customer site" roles="Administrator"/>

Isto parece não ter nenhum efeito, já que eu ainda vejo o item de menu quando conectado como um cliente. Quando ligo a filtragem de segurança, como em

<siteMap enabled="true">
  <providers>
    <add name="InternalSiteMap" type="System.Web.XmlSiteMapProvider" 
        siteMapFile="~/Internal/Internal.sitemap" />
    <add name="CustomerSiteMap" type="System.Web.XmlSiteMapProvider" 
     siteMapFile="~/Customer/Customer.sitemap" securityTrimmingEnabled="true" />
  </providers>
</siteMap>

todos os itens do menu são ido.

Na verdade, tenho web.configs tanto no interno e as pastas do cliente, por exemplo, para o cliente:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <authorization>
      <allow roles="Customer" />
      <deny users="*" />
    </authorization>
  </system.web>
</configuration>

eo administrador:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <authorization>
            <allow roles="Administrator" />
            <deny users="*" />
        </authorization>
    </system.web>
</configuration>

Mais uma vez, a autorização funciona, e quando eu estou logado como um cliente e eu clicar sobre o link do site interno no menu, estou sendo redirecionado para a página de login. Como administrador, posso clicar para o site de administração. Assim que eu ligar a filtragem de segurança para o provedor de mapa do site, que é suposto ter as ligações que não estou autorizado para fora do menu, o menu inteiro desaparece. o que estou perdendo? Eu preciso configurar o controle asp.menu para trabalhar em conjunto com isso?

Update: Eu coloquei uma recompensa por essa pergunta, porque eu ainda não pode obtê-lo para o trabalho. Estamos inclinados a jogar fora o controle de menu e escrever a nossa própria, mas se alguém pode fornecer uma dica, que seria preferível é claro. Mais uma vez - o problema não é com a segurança - os papéis e as regras de acesso funcionam como esperado. É com o controle menu e filtragem de segurança. O menu desaparece alltogether quando a filtragem de segurança está ligado para um mapa do site.

Update: Obrigado por encontrar este post, Pavel. O que eu aprendi com isso é que se houver entradas de Sitemap que não têm um caminho e URL (que também é verdade para alguns dos meus submenues), o controle não pode inferir permissões das configurações no web.config, e você tem que especificar os papéis no mapa do site. Caso contrário, eles serão ocultos por padrão.

Foi útil?

Solução

De menu Horizontal desaparece com securityTrimmingEnabled =" true ":

Certifique-se de que cada função tem acesso para o (não utilizado) siteMapNode manequim em a raiz, incluindo papéis = "*" na Web.sitemap mostrado abaixo:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap  enableLocalization="true"
     xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="" title="" roles="*"  description="">
      <siteMapNode url="~/default.aspx" resourceKey="siteMapHome" 
       title="Home" roles="admin,account" description="" />
<!-----More nodes-->

Outras dicas

http://www.vbforums.com/showthread.php?p=3625975

Verifique o usuário conectado tem o papel de administrador.

Editar:

Estou também muito se o seu não mento para especificar o papel na siteMapNode. Eu acredito papel site baseado mapeia trabalho off funções existentes, por exemplo, se um usuário tem acesso ao caminho que os specifys local de notas, então ele irá exibi-lo.

Além disso, especifique o caminho no webs.config.

<location path="admin/">
    <system.web>
        <authorization>
            <allow roles="Admin"  />
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

E, finalmente, remover o '~' do seu mapa do site para que a comparação vai corresponder.

Uma vez que tudo isso é feito e ainda não se isso é trabalho, fundir as web.configs para certificar-se permisions não estão sendo perdidas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top