Módulo de vistas: cómo limitar el acceso del usuario

8

Estoy usando el módulo Vistas para crear una vista a la que solo usuarios específicos deberían poder acceder. Sé que Vistas incluye el control de acceso por rol o permisos, pero necesito algo más detallado: Básicamente, quiero poder decir que solo el usuario "x" y el usuario "y" pueden acceder a una vista en particular (o de lo contrario, alguien con un rol de administrador del sitio). Entonces, esto funcionaría de manera muy similar a cómo actúa el módulo ACL para nodos individuales.

¿Es el mejor enfoque para crear un complemento de acceso de vistas personalizadas? No tengo mucha experiencia con esto.

Además, me pregunto si usar un argumento con alguna validación para lograr esto (para que no tenga que crear docenas de vistas separadas). Por ejemplo, dado que esta vista será una pestaña en una ruta de nodo específica, me pregunto acerca de cómo configurar un campo de referencia de usuario en ese nodo que especifique quién podría ver la vista. Solo necesito una forma para que la vista solo valide si el usuario actual es igual a un usuario especificado en el campo de referencia del usuario.

¿Algunas ideas? ¿O estoy haciendo esto más complicado de lo que debe ser?

Gracias ben

BenK
fuente
Es posible que tenga que escribir un complemento de acceso de vistas, pero si pudiera actualizar su pregunta con un poco más de detalle, tal vez podría lograrlo de otra manera. ¿Qué hace / muestra la vista? ¿Qué usuarios pueden verlo? ¿Los usuarios tienen diferentes roles? ¿Los usuarios tienen un campo específico o algo asociado con ellos que les permite acceder a él?
Jamie Hollern
Jamie, gracias por la respuesta. En realidad, también estoy usando Drupal Commerce para crear un tipo único de tienda en línea. Como una pestaña en cada nodo de producto (además de las pestañas Ver y Editar), quiero crear una pestaña adicional llamada "Pedidos" que sería una vista que muestra todos los pedidos que han incluido ese producto en particular. El proveedor del producto en particular es el usuario que deseo que pueda ver la vista "Pedidos" de ese producto.
BenK
De esta manera, el proveedor puede monitorear las ventas de su producto de manera continua. Pero no quiero otorgar acceso a todos los que tienen un rol de "proveedor" porque entonces cualquier proveedor podría ver las ventas de los productos de otros proveedores. ¿Tener sentido? ;-) --Ben
BenK

Respuestas:

5

En lugar de limitar los permisos en la Vista, puede limitar los permisos en el elemento del menú que conduce a esa vista (ya sea una pestaña en un nodo o una devolución de llamada del menú). Puede crear su vista con solo una visualización de "Valores predeterminados" y sin visualización de página (para que los usuarios no puedan descubrir la ruta a ella). Luego en su page callbackpara el elemento del menú simplemente llame views_embed_viewpara mostrar la vista. Parece que manejar permisos en un elemento de menú podría ser más fácil que escribir un nuevo complemento para Vistas (aunque un complemento podría ser útil para otros).

Chaulky
fuente
¡Gracias por la sugerencia! Terminé siguiendo este enfoque general (que también fue sugerido por Berdir), pero creé un campo de referencia de usuario en cada nodo llamado field_usercanaccess. Pude usar hook_menu () y definir una devolución de llamada de acceso que se aseguró de que el usuario actual coincidiera con un usuario referenciado en el campo. De lo contrario, la pestaña (y la vista) no se mostrarían. ¡Esto funciona muy bien! :-)
BenK
@BenK impresionante! Me alegra que tengas algo funcionando. Como parte de ayudar a que Drupal Answers sea un gran recurso, también debe votar las respuestas (o preguntas) que le resulten útiles. Por lo que probablemente debe votar por la respuesta de @ Berdir (y el mío, pero este no soy yo tratando de conseguir votos, que está tratando de hacer que Drupal Respuestas un mejor sitio)
Chaulky
Gracias. :-) Soy nuevo en Stack Exchange y solo tengo 13 puntos. Cuando trato de votar, dice que necesito 15 puntos para votar. Entonces, si alguien tiene dos puntos de sobra (o puedo ganarlos de otra manera) definitivamente votaría por las respuestas y preguntas. --Ben
BenK
@BenK oh cierto, olvidé el límite de 15 puntos. Siempre puede intentar responder una pregunta ... un voto positivo en su respuesta obtiene 10 rep.
Chaulky
6

Pruebe el módulo de devolución de llamada de Views Access .

Proporciona control de acceso basado en devolución de llamada para Vistas.

Las funciones de devolución de llamada disponibles se definen mediante módulos que utilizan la hook_views_access_callbacks()función (de la misma manera que en hook_perm()), y luego se pueden configurar en la configuración de "restricciones de acceso" de la vista.

usuario5318
fuente
El uso de las vistas de devolución de llamada de acceso funciona muy bien, excepto por un extraño error fatal. Ver aquí: drupal.stackexchange.com/questions/3336/… . Parece el camino a seguir, pero ¿cómo solucionarlo?
Druvision
2

Debo estar perdiendo algo, pero parece que crearías un nuevo rol y agregarías estos usuarios. Luego, use la función Acceso a vistas: función.

Si necesita vincular los derechos de acceso a algo en el contenido, usaría un acceso de Vistas personalizado, que encontré una configuración difícil la primera vez, pero agradezco la flexibilidad una vez que funciona. Si la Vista está generando el Elemento del menú, no aparecerá si la Vista no pasa la función de acceso.

Si solo está ocultando un elemento del menú, me parece que la vista aún se ejecutará y un Usuario podría modificar un URI para ver los datos.

alemán

alemán
fuente
1

¿Qué tal usar el módulo de Permisos personalizados para crear algunos permisos nuevos específicamente para su propósito, y luego usar el módulo de Permisos de usuario para asignar esos nuevos permisos a usuarios individuales?

El módulo de permisos personalizados es muy ligero. Sin embargo, no estoy tan seguro sobre el módulo de permisos de usuario, ya que esencialmente crea una nueva función para cada usuario detrás de escena (estas funciones no son visibles en la página principal de permisos). Si tiene muchos usuarios, esto puede aumentar un poco el tamaño de sus roles y tablas de user_roles.

Tom Kirkpatrick
fuente
Esa es una sugerencia interesante para usar permisos personalizados. No había visto ese módulo desde que se hizo más amplio que solo los permisos de configuración del sitio. La única complicación aquí es que estoy haciendo todo esto en Drupal 7 (y todavía no hay una sucursal oficial). Pero si pudiera hacerlo funcionar, es posible especificar el permiso en el control de acceso de la vista directamente (sin necesidad del módulo de Permisos de usuario). ¡Gracias por la sugerencia! :-)
BenK
Lo intentaré e informaré.
BenK
0

Correcto, eso tiene más sentido. Creo que podría (posiblemente, no 100% seguro) usar una vista y un argumento. Establezca el argumento para que sea una identificación de usuario tomada del usuario actualmente conectado y haga que el argumento predeterminado no muestre nada. Eso debería poder hacerlo, aunque no sé qué tan seguro sería ser justo. Si lo intentas, vuelve a publicar y avísame tu progreso.

Jamie Hollern
fuente
Sí, intentaré las cosas e informaré. También estoy probando un complemento de acceso de vistas con un argumento, así que veremos cómo funciona. Gracias.
BenK