Pregunta

Aquí está la descripción general

  1. Crear membresías
  2. Crear roles
  3. Crear Sitemap (modificar para usar roles = "admin")
  4. Crear menú y vincular web.sitemap en el menú, utilizando un nuevo plato de datos en la etiqueta inteligente del menú
  5. Modificar web.config para habilitar SecurityTrimmingEnabled

Funciona así. Si asigno un rol al nodo raíz en el mapa del sitio, el menú está bien oculto para todos los demás roles, excepto los roles a los que se avecina.

Si uso el rol en uno de los submenú, no funciona. ¿Alguien tiene una pista por qué?

web.sitemap

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode roles="*"> <--------------- Roles Works here
  <siteMapNode title="Home" url="~/Default.aspx" roles="admin"></siteMapNode> <-------- But not here
<siteMapNode title="Videos" url="~/Tags.aspx" />
<siteMapNode title="Student" url="~/MemberList.aspx" roles="student"/>
<siteMapNode title="My Page" url="~/MyPage.aspx" />
<siteMapNode title="My Recent Views" url="~/RecentViews.aspx" />
<siteMapNode title="Upload a Video" url="~/Upload.aspx" />
  <siteMapNode title="Administer Users" url="~/AdministerUsers.aspx" roles="admin">
      <siteMapNode title="Creat user" url="createUser.aspx"></siteMapNode>
  </siteMapNode>
</siteMapNode>
</siteMap>

archivo web.config (modificación)

<siteMap enabled="true">
    <providers>
        <clear/>
        <add siteMapFile="Web.sitemap" name="AspNetXmlSiteMapProvider" type="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true"/>
    </providers>
</siteMap>
¿Fue útil?

Solución

Es posible que desee revisar este enlace: http://blogs.msdn.com/b/dannychen/archive/2006/03/16/553005.aspx. La función de recortes de seguridad de ASP.NET es una de las características más mal entendidas.

La idea básica es que los recortes de seguridad se aplican a través del <authorization> Etiqueta en web.config, no a través de los roles en el mapa del sitio. La propiedad de roles en el mapa del sitio solo puede ensanchar Seguridad, no lo limita. Entonces, por ejemplo, así es como realmente aplicaría la regla de roles de los estudiantes para ~/memberList.aspx:

<location path="~/MemberList.aspx">
  <system.web>
    <authorization>
      <allow roles="Student" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

Esto no solo hará que el enlace desaparezca de su menú, sino que en realidad hará que la página sea imposible de visitar por alguien que no esté en el rol de estudiante, incluso si escriben la URL directamente en el navegador. Sin el <authorization> Etiqueta, siempre será posible escribir la URL directamente y aún ver la página.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top