Pergunta

Eu tenho um site ASP.NET, no qual estou tentando usar as funções de autenticação do Windows e Active Directory para limitar o acesso a algumas páginas. Eu olhei para um Página do tutorial de Scott Gu, mas não consigo alcançar o que quero.

Estou ignorando o nó raiz no meu SiteMapDataSource. Quero mostrar o nó "Documentos" a todos os usuários, mas limitar a exibição das funções "pesquisar" e "fazer upload" para 2 funções diferentes. Estou no "domínio validRole", mas não no "domínio maiduprole". Com o sitemap e o web.config abaixo, estou exibindo todos os nós. Se eu remover o roles="*" No nó "documentos" (como sugerido por Scott Gu), não tenho nós exibidos.

Existe uma maneira de limitar a exibição de nós filhos individuais sem precisar escrever código personalizado?

Este é o meu sitemap:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
    <siteMapNode url="~/Default.aspx" 
                 title="Home">
        <siteMapNode title="Documents" roles="*">
            <siteMapNode url="~/Documents/Search.aspx" 
                         title="Search Documents" 
                         roles="DOMAIN\validrole" />
            <siteMapNode url="~/Documents/Upload.aspx" 
                         title="Upload Documents" 
                         roles="DOMAIN\madeuprole" />
            <siteMapNode url="~/Documents/Publish.aspx" 
                         title="Publish Documents" />
        </siteMapNode>
        <siteMapNode title="Users" roles="*">
            <siteMapNode url="~/Users/Search.aspx" 
                         title="Search Users" 
                         roles="DOMAIN\validrole" />
        </siteMapNode>
    </siteMapNode>
</siteMap>

E esta é a seção relevante do meu web.config:

<authentication mode="Windows"/>
<authorization>
    <allow roles="DOMAIN\validrole"/>
    <deny users="*"/>
</authorization>

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
    <providers>
        <add name="XmlSiteMapProvider"
             description="Default SiteMap provider."
             type="System.Web.XmlSiteMapProvider"
             siteMapFile="Web.sitemap"
             securityTrimmingEnabled="true" />
    </providers>
</siteMap>
Foi útil?

Solução

Classificado - você precisa configurar a autorização na página no arquivo web.config como este:

<location path="Documents/Upload.aspx">
    <system.web>
        <authorization>
            <allow roles="DOMAIN\madeuprole"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

Eu tentei isso com o caminho "~/Documents/Upload.aspx", mas isso não funcionou - precisa ser um caminho em relação ao arquivo de configuração.

Além disso, tive que colocar um URL nos meus nós do sitemap, assim:

<siteMapNode title="Documents" roles="*" url="Made-Up.aspx">

Isso parou tudo desaparecendo, embora eu não tenha idéia do porquê. Não estou exibindo o URL, então qualquer inventora faz o truque.

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