2010-10-15 11 views
10

Tengo problemas para permitir que un Rol específico acceda a una página específica en un subdirectorio.Autenticación de formularios de ASP.NET Permitir el acceso a un archivo específico en el subdirectorio cuando se deben denegar todos los demás

Mi aplicación ASP.NET tiene un directorio, ~/Forms/Administration que tiene acceso limitado. Hay un archivo específico, ~/Forms/Administration/Default.aspx al que quiero dar acceso a 1 rol de usuario adicional, así como también la función Admin.

En ~/Formas/Administración, tengo un archivo web.config que tiene este aspecto:

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

    <location path="Forms/Administration/Default.aspx"> 
     <system.web> 
      <authorization> 
       <allow roles="Administrator, User, AdditionalUser" /> 
      </authorization> 
     </system.web> 
    </location> 

</configuration> 

El usuario administrador funciona bien, pero AdditionalUser siempre falla. He intentado varias cosas - los lugares de localización como

<location path="Forms/Administration/Default.aspx"> 

Y como

<location path="~/Forms/Administration/Default.aspx"> 

¿El niegan = "*" de la primera regla genérica teniendo precedente? He intentado cambiar

<deny users="*"/> 

Para

<deny users="?"/> 

Pero eso termina dando acceso a AdditionalUser todo. Sugerencias?

EDIT: intenté poner la ubicación específica permitir antes de la regla de denegación genérica, en caso de que el orden importara. El mismo problema.

ACTUALIZACIÓN: claramente me falta algo aquí: eliminé el deny * config, y dejé solo en la sección específica de la ubicación. Entonces, en lugar de permitir ciertos roles, configuré ese para negar todo (*). Sin embargo, no me niega nada cuando inicio sesión. Incluso reduje la regla para no ser específico del archivo, pero aplicarlo a todo el directorio, y no me niega nada. Sin embargo, las reglas originales que no son de ubicación funcionan, así que sé que este archivo de configuración se está leyendo.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <location path="Forms/Administration"> 
     <system.web> 
      <authorization> 
       <deny users="*" /> 
      </authorization> 
     </system.web> 
    </location> 
</configuration> 

Respuesta

18

Dos cosas:

  1. La ubicación es relativa al archivo web.config, así que si su web.config ya está en/Formularios/Administración debe corregirse ser:

    <location path="Default.aspx"> 
        <system.web> 
         <authorization> 
          <allow roles="Administrator, User, AdditionalUser" /> 
         </authorization> 
        </system.web> 
    </location> 
    
  2. Para aclarar sobre el orden de Permitir y Denegar, la autorización se aplicará en función de la primera coincidencia que encuentre, por lo que el orden es muy importante. Por ejemplo:

    <deny users="*" /> 
    <allow users="Administrator" /> 
    

administrador será denegada ya que coincidía con la primera entrada de negar ... a pesar de que ha especificado para permitir al usuario administrador en la línea siguiente.Así que para que sólo permita el Administrador, la sintaxis correcta sería:

<allow users="Administrator" /> 
<deny users="*" /> 

En resumen

Si estoy leyendo lo que quiere correctamente, esto es, probablemente, el producto final que desea:

<configuration> 
    <system.web> 
    <authorization> 
     <allow roles="Administrator, User" /> 
     <deny users="*"/> 
    </authorization> 
    </system.web> 

    <location path="Default.aspx"> 
    <system.web> 
     <authorization> 
      <allow roles="AdditionalUser" /> 
     </authorization> 
    </system.web> 
    </location> 

</configuration> 
+0

Gah, tiene mucho sentido. Intentaré esta solución tan pronto como pueda. – Matt

+0

Chris, ¿me pueden ayudar con http://stackoverflow.com/questions/15882511/how-do-i-configure-asp-net-forms-authentication-to-deny-only-a-specific-url. Como solo necesito 1 uso para tener acceso, solo estoy ingresando su información de inicio de sesión –

+0

Lol @NatePet, he comentado sobre su pregunta. Espero que eso ayude –

Cuestiones relacionadas