sql >> Base de Datos >  >> RDS >> Mysql

ColdFusion:¿Opciones de aplicación basadas en el rol?

Tienes razón, asegurar una página y asegurar elementos es diferente.

En mi opinión y en la práctica, creo que vincular cualquier código a un rol o usuario es en realidad un enfoque incorrecto. En su lugar, vincule los permisos a los elementos y páginas, luego vincule los roles a esos permisos. Y, por supuesto, a los usuarios se les asignan roles.

Es importante tener los tres :

  1. Usuarios
  2. Funciones
  3. Permisos <-- esto es lo que te estás perdiendo

Los permisos son los elementos y páginas seguros, no los roles ni los usuarios. Su código no debe tener idea (porque no es necesario) de qué usuarios o roles hay, solo nombres de permisos.

Cuando un usuario inicia sesión, tomo su(s) rol(es). Luego tomo todos los permisos que están asignados a esos roles (simplemente una lista de valores de cadena).

Por ejemplo, en una página podría tener:

  • Añadir artículo
  • Ver elemento
  • Eliminar elemento

Cuando codifico esa página, en realidad aseguro cada uno de esos elementos con cadenas de permisos con nombres similares (addItem, viewItem, deleteItem).

<cfif listContainsNoCase( session.permissions, 'addItem' )>
    <!--- code to add item --->
</cfif>

(Nota:recomiendo usar una etiqueta o función personalizada para esto, pero como ejemplo, lo anterior funciona bien).

Si lo hace de esta manera, proporciona la máxima flexibilidad y abstracción. Si asegura elementos basados ​​en roles, se limita a sí mismo:

  • ¡Agregar nuevos roles requerirá muchos cambios de código!
  • ¡Cambiar permisos entre roles requiere muchos cambios de código!

Si lo hace como se mencionó anteriormente, nunca necesitará cambiar su código de seguridad dentro del código base, porque el permiso "addItem" siempre debe estar en la lógica "add item", ¿verdad? :)

Ahora, si necesita crear un rol de tipo "administrador", que tenga todos los roles de usuario y algunos derechos de administrador seleccionados, simplemente cree ese rol y asígnele los permisos correctos (tal vez addItem y editItem, pero no deleteItem) . ¡Bam! Ahora tengo un rol de administrador para asignar a los usuarios sin cambios de código !

Si hubiera rociado mi código con el tipo de cosas "es el usuario este rol", tendría que ir a editar mi código en todas partes para permitir que mi nuevo rol sea "administrador" - ¡qué asco!

¿Tiene sentido?

=)