No permita que un usuario eliminar un nodo, pero permiten eliminar a través Vistas a granel de Operaciones

StackOverflow https://stackoverflow.com/questions/3690519

Pregunta

Tengo el siguiente escenario:

  • Editor de funciones debe no permitir que nodos eliminar. Por lo tanto la correspondiente el permiso es de-seleccionado en el página permisos.
  • No obstante Editor debe ser capaz de eliminar nodos Vistas desde Bulk operaciones. Utilizando Reglas se creó llamado una acción "Eliminación Segura" que comprueba cosas como si el nodo no está publicada etc. antes de eliminar el nodo.

El problema es los permisos de nodo Operaciones Vistas granel aspectos. Editor no será capaz de eliminar el nodo, ya que no se ha dado ese permiso. ¿Hay alguna manera de que Editor puede convertirse en un usuario papel más alta (como una especie de sudo) mientras se realiza esta acción en VBO? Como alternativa hay una manera de decir VBO ignorar el acceso nodo para esta acción?

Estoy seguro de que este es un requisito convencional pero parece que no puede encontrar una solución.

Se prefieren las soluciones que no impliquen la programación.

¿Fue útil?

Solución

La manera simple, pero no tan limpio, es la ruta que ya se tomó, pero con un pequeño módulo adicional, que ayuda a él.

  • tiene una función my_module_can_delete($user), que vuelve TRUE si se permite al usuario borrar, FALSE si el usuario no lo es.
  • implementos hook_form_alter() modificar y eliminar el botón en el formulario node_edit, si my_module_can_delete($user)
  • implementos hook_form_alter() para modificar la forma de confirmar que se llama de encendido / nodo /% NID / eliminar y añadir un mensaje allí, que indica al usuario que él o ella my_module_can_delete($user). Esto debería ser suficiente, ya que deshabilitar esta forma dará lugar a los usuarios no ser capaz de conseguir más allá de este formulario. FORMA-API se encargará de eso.

Sin embargo, puede que sea más robusto, para atrapar otros módulos Eliminando:

  • implementos hook_nodeapi(), $op == 'delete' para atrapar acciones de eliminación y alto (invocando drupal_goto(), o llamando drupal_access_denied() para hacer cumplir un usuario de errores. Sólo coger delete-acciones si el árbitro fue el-confirm-forma de borrar como se mencionó anteriormente. O, más segura, lista blanca de su VBO-acción y falsa retorno de todos los demás referers. Un árbitro puede a menudo ser encontrados mediante la lectura del nodo $ pasó a lo largo de hook_nodeapi().

A, en mi humilde opinión, mucho más limpio, pero probablemente más intensiva alternativa , sería simplemente asegurarse de que se llaman sus lotes / acciones en cada acción de eliminación.

En un módulo, se podría hacer esto, evitando toda la VBO-configuración y dejando todas las acciones extra-borrado de ahí. A continuación, escribir un módulo que implementa hook_nodeapi() y luego llama a todas las acciones de limpieza a partir de ahí. De esa manera usted puede estar seguro de que sus delete-acciones se denominan en cada delete-acción en cualquier nodo. Obviamente se puede añadir algunas condiciones en su hook_nodeapi () para invocar solamente sus módulos en ciertos casos (node-tipos, roles de usuario, permisos y así sucesivamente).

Otros consejos

Bueno, me parece que usted tiene una configuración en la que no desea que los usuarios de roles editor para eliminar cosas, realmente, excepto en ciertas situaciones extremas. Aquí está mi sugerencia:

1) Montar el módulo de la bandera. Crear una bandera 'que desea eliminar' que sólo puede ser asignado por la gente función de editor.

2) no he mirado en él, pero yo "m seguro de que hay probablemente una regla o gatillo / combo de acción que dejará de publicarse el nodo cuando el 'se va a eliminar' bandera es asignado a la misma. Esto eliminará el nodo de la vista casual.

3) A continuación, establezca ya sea hacia arriba alguna actividad cron plazo (disparador / acción o regla) para eliminar nodos con 'que desea borrar' pabellón conjunto sobre ellos, o tienen otro usuario con una mayor permisos vienen de vez en cuando y eliminar los elementos marcados .

De esta manera usted no está realmente sin pasar por el sistema de permisos, y sin embargo, las cosas todavía está siendo retirado de su sitio.

Me quedó atrapado fuera de esto por un tiempo hasta que me di cuenta de los "actions_permissions" módulo, activar esta y en la página de permisos puede proporcionar acceso a determinadas acciones sobre un papel de base papel.

no tengo una buena solución sin codificación, y no estoy seguro de que yo llamaría esta solución "grande" - pero una forma podría ser la implementación de un módulo simple con un gancho form_alter que elimina el botón de eliminación de las formas de edición de nodo, ya que se construyen.

En general parece que el papel o bien tiene permiso para borrar o no nodos, y monerías que esto va a ser menos robusta que te pueden gustar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top