asp.net mvc - permisos - Especificación de roles en web.config de una aplicación MVC de asp.net
roles y permisos mvc c# (2)
Por favor, eche un vistazo a este excelente ejemplo, en el que el autor habla sobre el problema al que se enfrenta.
http://www.ryanmwright.com/2010/04/25/dynamic-controlleraction-authorization-in-asp-net-mvc/
Estoy creando una aplicación MVC con formularios auth. Me estoy autentificando contra el directorio activo y, por lo tanto, he creado un RoleProvider personalizado. Mi aplicación solo está relacionada con un pequeño conjunto de roles que hasta ahora he estado definiendo en la sección de ajustes de aplicaciones de mi web.config
<appSettings>
<add key="DirectorRole" value="Domain/Directors" />
<add key="ManagementRole" value="Domain/Managers" />
...
</appSettings>
Sin embargo, me he encontrado con un par de problemas con este enfoque:
- No puedo hacer referencia a esta configuración en mis anotaciones de datos de control:
[Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])]
ya que no se compilará, así que debo especificar el nombre del grupo nuevamente:[Authorize(Roles = "Domain//Directors")]
. - En mi web.config, me gustaría especificar groupsToUse para mi proveedor de rol y simplemente hacer referencia a una lista preexistente, en lugar de mantener dos listas separadas del mismo conjunto de roles.
Parece que debe haber una forma mejor / reutilizable de definir los roles en la configuración web. ¿Alguien puede indicarme la dirección correcta, por favor?
Preferiría usar un atributo de autorización personalizado. Como éste.
public class MyAuthorizeAttribute : AuthorizeAttribute {
public MyAuthorizeAttribute(params string[] roleKeys) {
List<string> roles = new List<string>(roleKeys.Length);
//foreach(var roleKey in roleKeys) {
//roles.Add(ConfigurationManager.AppSettings["DirectorRole"]);
//}
var allRoles = (NameValueCollection)ConfigurationManager.GetSection("roles");
foreach(var roleKey in roleKeys) {
roles.Add(allRoles[roleKey]);
}
this.Roles = string.Join(",", roles);
}
}
En su controlador, use:
[MyAuthorize("DirectorRole")]
En su web.config
<configSections>
<section
name="roles"
type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<roles>
<add key="DirectorRole" value="Domain/Directors" />
<add key="ManagementRole" value="Domain/Managers" />
</roles>
Espero que esto solucione tu primer problema bien. Y girar un poco resolverá el segundo también.