2010-02-24 9 views
9

Todas las cuestiones de seguridad con las que he trabajado en ASP.Net en el pasado se basaron principalmente en las funciones. Esto es bastante fácil de implementar y ASP.Net está orientado para este tipo de modelo de seguridad. Sin embargo, estoy buscando algo un poco más fino que la simple seguridad basada en roles.Seguridad de ASP.Net utilizando Seguridad basada en operaciones

Esencialmente Quiero ser capaz de escribir código como este:

if(SecurityService.CanPerformOperation("SomeUpdateOperation")){ 
    // perform some update logic here 
} 

también necesitaría la fila de acceso de seguridad a nivel de esta manera:

if(SecurityService.CanPerformOperation("SomeViewOperation", SomeEntityIdentifier)){ 
    // Allow user to see specific data 
} 

Una vez más, el control de acceso de grano fino. ¿Hay algo como esto ya construido? ¿Algún marco que puedo incluir en ASP.Net y comenzar a usar, o voy a tener que construirlo yo mismo?

+0

@Josh: ¿Alguna vez encontró una forma decente de implementar algo como esto? – Breadtruck

+0

Parcialmente sí. Resolví el problema de operación creando una tabla de roles en la base de datos que tenía una tabla xRef que se vinculaba a sí misma. De esta forma, puedo crear una estructura en árbol de roles y usar un CTE para traer de vuelta la jerarquía aplanada. Creé un rol personalizado y proveedores de membresía para hacer el trabajo sucio y dejar que ASP.Net maneje el resto. Se ve un poco gracioso en el código porque todo es un rol lógico, pero conceptualmente hay roles y permisos. – Josh

Respuesta

1

¿Ha mirado a Authorization Manager (AzMan)? http://msdn.microsoft.com/en-us/library/bb897401.aspx

Se incluyó con Server 2003 y ha tenido algunas actualizaciones en el servidor 2008, y viene con una herramienta de administración de MMC.

Puede almacenar sus datos en un archivo xml o una partición AD/ADAM utilizando el servidor de la versión 2003, y en el servidor 2008 agregaron soporte SQL.

Esta herramienta le permite vincular sus objetos de seguridad en una estructura jerárquica de roles, tareas & operaciones.

Puede usar esto como un proveedor basado en roles en Asp.net pero también incluye clases .net para que pueda acceder directamente a los contenidos de la tienda de autorizaciones.

+0

@squig, miré a AzMan originalmente porque sonaba demasiado bueno para ser verdad. Tal vez no lo miré lo suficientemente cerca, pero parecía tener dos "contras" principales que vi. 1.) Los proveedores ASP.Net AzMan solo admitían un subconjunto muy pequeño de la jerarquía general, por lo que no era más útil que los proveedores normales, y 2.) Estaba estrechamente integrado con AD, lo cual quería evitar. Si es posible usar AzMan sin toda la integración de AD, podría valer la pena. En este punto, tengo mis propios proveedores que funcionan bastante bien para mis necesidades. – Josh

0

Creo que es posible que esté buscando seguridad declarativa. La seguridad declarativa le permite, así, 'Declarar' quién puede acceder a qué, ya que los atributos en el código aquí son una página en Seguridad basada en roles también en MSDN. Aquí hay un ejemplo:

[PrincipalPermissionAttribute(SecurityAction.Demand, Role="admins")] 
public class foo 
{ 
    [PrincipalPermissionAttribute(SecurityAction.Demand, Role="Domain Admins")] 
    public void bar() 
    { 
     .... 
    } 
} 
+0

@Metz, en realidad uso mucho este atributo, pero más específicamente lo que estaba buscando era la capacidad de componer acciones/operaciones de grano fino en roles. Específicamente, quería evitar el uso de roles en mi código. De esa manera, puedo crear roles arbitrarios que se componen de cualquier número de permisos y asignar esa función a un usuario. El usuario tendría acceso a ese subconjunto de permisos a través de su función. Básicamente, he hecho esta parte usando un RoleProvider personalizado, pero estoy sorprendido de que nadie haya hecho esto ya. – Josh

Cuestiones relacionadas