2008-10-28 15 views
7

Estoy debatiendo la mejor manera de propagar permisos bastante complejos del servidor a una aplicación AJAX, y no estoy seguro de cuál es el mejor enfoque para tomar.Propagar permisos a Javascript

Básicamente, quiero que se definan mis permisos para poder solicitar un conjunto completo de permisos en una toma y ajustar la UI según corresponda (los cambios en la UI pueden ser tan bajos como deshabilitar ciertos elementos del menú contextual). Por supuesto, todavía necesito hacer cumplir el lado del servidor de permisos.

Por lo tanto, me preguntaba si alguien tiene alguna sugerencia de la mejor manera a

  1. mantener los permisos y utilizarlos en el código del servidor
  2. tener fácil acceso a los permisos en javascript
  3. no tienen para hacer una solicitud de ida y vuelta al servidor para cada permiso individual

¿Pensamientos?

Respuesta

2

Si usted tiene un claro conjunto de permisos, como un "nivel de usuario "o" tipo de usuario ", puede simplemente pasar el valor hacia abajo en un campo oculto y acceder al valor a través del DOM. Todavía podría hacer esto si sus permisos fueran más granulares, pero tendría muchos campos ocultos o tendría que codificar la información en XML o JSON o en algún otro formato.

Puede establecerlos como indicadores de bits para que pueda O un único valor numérico con una máscara para ver si el usuario tenía el permiso para una actividad específica. Eso sería muy flexible y siempre que no tenga más de 32 o más "derechos" específicos, eso permitiría cualquier permutación de esos derechos en un paquete muy pequeño (básicamente, un int sin firmar).

Por ejemplo:

0x00000001 //edit permission 
0x00000002 //create new thing permission 
0x00000004 //delete things permission 
0x00000008 //view hidden things permission 
    . 
    . 
    . 
0x80000000 //total control of the server and everyone logged in 

A continuación, un usuario con un permiso de 0x000007 podría editar, crear y eliminar, pero nada más.

En cualquier caso, creo que está en el camino correcto: realice la solicitud una vez por página, almacene los permisos en una estructura de datos global de JavaScript y vaya desde allí. AJAX es agradable, pero no desea consultar el servidor para cada permiso específico en toda su página. Lo haría una vez en la carga de la página, configurando la presentación de su página y guardando el valor en una variable global, luego referencia los permisos localmente para las funciones del evento.

+0

Si almacena información de permisos en un objeto JS global, ¿no tiene el usuario la capacidad de editar/cambiar el objeto JS de la máquina cliente? –

+0

Los permisos se almacenan en JS estrictamente para la manipulación de la UI, no para el acceso real a los datos, por ejemplo, ocultar el acceso a la pestaña X o mostrar la columna Y, etc. – jvenema

+0

Por lo que vale, terminé con algo como esto: var MyApp. canRead = function (entity, property) {... lee el literal JS Object rendido desde el servidor para determinar el acceso de lectura a la entidad especificada ...} ;. Los permisos se definen en una tabla en el servidor y se procesan para que el cliente acceda a ellos a través de la función canRead(). – jvenema

-1

Codifíquelos como JSON.

2

Si transmite la estructura de permisos al cliente como un objeto JSON (o XML, si lo prefiere), puede manipular ese objeto con el código del lado del cliente y enviarlo de vuelta al servidor, que puede hacer lo que sea necesita validar los datos y persistir.

+0

Este tipo pasa por alto el punto ... Puedo enviar/retroceder en cualquier formato que desee, me doy cuenta de eso.Lo que estoy preguntando es cuál es la mejor manera de relacionar los permisos definidos en el servidor con los elementos de la interfaz de usuario en el cliente. – jvenema

1

No necesariamente lo veo como la solución más "correcta", pero ¿sería posible mantener todos los permisos en el lado del servidor, y solo servir la UI actualizada en lugar de algún tipo de sistema de permisos JSON?

Habría que tomar la decisión sobre la base de lo ocupado y su aplicación intensiva espera ser, pero definitivamente vale la pena hacer una decisión de cualquier manera

+0

Ese sería el enfoque preferido de ASP.Net, pero con cierta granularidad en cualquier sistema de tipo, también hay ventajas de tener control del lado del cliente. – CMPalmer

+0

Es más complejo que eso; De hecho, estoy usando ExtJS, por lo que todo está predefinido en JS. Por ejemplo, la aplicación tiene 5 "áreas", pero solo ciertos usuarios tienen acceso a esas áreas, pero realmente no quiero renderizar diferentes JS cada vez (y posiblemente tengan problemas porque falta el elemento X, etc.). En cambio, creo que la IU debería definirse de la misma manera para todos, pero ocultar/mostrar de acuerdo con las permanentes. – jvenema

Cuestiones relacionadas