Permitir que un miembro tenga acceso únicamente a tipos de contenido personalizados. Permiso para editar solo sus propias publicaciones

12 abr 2011, 13:08:21
Vistas: 68.2K
Votos: 35

OK, estoy buscando la mejor manera de abordar esto.

Me siento muy cómodo con PHP y creando tipos de contenido personalizados con campos meta personalizados en WordPress.

Esto es lo que quiero hacer:

  1. El usuario se registra y se establece como suscriptor por defecto.
  2. El usuario solicita al administrador tener permiso para el tipo de contenido personalizado.
  3. El administrador asigna al usuario otro nombre de permiso como "Propietario de Tienda".
  4. El usuario ahora puede ver el tipo de contenido personalizado y puede hacer una entrada en este tipo de contenido.
  5. El usuario solo puede ver y editar sus propias publicaciones.

Necesito ayuda con lo siguiente:

  1. Cómo crear un nuevo "Rol" llamado "Propietario de Tienda",
  2. Cómo dar el permiso correcto a dicho rol para que solo vea y tenga acceso al tipo de contenido personalizado.
  3. Permitir que el usuario solo vea y edite sus propias publicaciones en este tipo de contenido personalizado.

Idealmente preferiría que todo esto se hiciera desde el wp-admin pero supongo que podría necesitar construir un front-end para obtener el control preciso que busco.

Cualquier aporte es muy apreciado.

Saludos cordiales

0
Todas las respuestas a la pregunta 5
3
22

Utiliza el plugin "Members" de Justin Tadlock. Te proporciona la capacidad de crear nuevos roles y editar roles existentes, así como añadir capacidades personalizadas. Todo ese trabajo que tendrías que hacer puede reducirse a unos pocos clics.

Sé que mencionaste en tu comentario a la respuesta de ZaMoose que estás "buscando escribir la funcionalidad yo mismo para tener control total sobre todo". Eso pierde por completo el punto del software de código abierto. Justin Tadlock publicó su plugin precisamente para que lo uses y así TENGAS control total sobre todo.

Si realmente realmente quieres reinventar la rueda, potencialmente desperdiciando cientos de horas de tu tiempo, no puedo detenerte, pero al menos podrías ahorrarte el problema y usar el plugin de Tadlock para aprender cómo hacer lo que deseas.

Una vez que tengas un plugin que haga lo que necesitas, deberás cambiar la bandera 'map_meta_cap' a true y la bandera 'capability_type' en tu función de registro del tipo de contenido para que diga algo diferente a 'post', 'page' o cualquier otro tipo 'reservado'. Luego, duplica todas las capacidades relacionadas con los posts (por ejemplo, edit_posts, edit_others_posts, publish_posts, etc.), usando tu tipo de capacidad en lugar de posts. Asegúrate de asignar todos estos permisos a los administradores (no podrás ver el tipo de contenido hasta que hagas esto), luego crea tu rol, imitando las habilidades del rol 'colaborador' para tu tipo de contenido.

Por ejemplo, si tu tipo de capacidad fuera foobars, querrías dar a los 'dueños de tienda' las capacidades edit_foobars, delete_foobars y read. De esa manera pueden crear sus propios borradores de foobars y eliminar esos borradores, pero como no tienen capacidades publish_foobars, tienen que enviarlos para aprobación. Como no tienen edit_published_foobars, todas las modificaciones a un foobar aprobado deben ser aprobadas.

12 abr 2011 17:49:40
Comentarios

OK, estoy usando el plugin Members ahora para entender cómo funcionan los permisos de miembros. He configurado 'map_meta_cap' => true y 'capability_type' => 'shopowner' en mi tipo de contenido personalizado. He creado un nuevo rol llamado ShopOwner y le he dado las capacidades de read, edit_shopowner, delete_shopowner. Asigné un usuario al rol de ShopOwner e inicié sesión con ese usuario. Ese usuario no puede ver el tipo de contenido personalizado. ¿Me he perdido algo?

Scott Scott
12 abr 2011 19:33:56

cámbialos a edit_shopowners y delete_shopowners. edit_shopowner y delete_shopowner son capacidades meta que en realidad nunca se verifican. Se verifican cuando alguien intenta editar o eliminar un elemento específico, y terminan verificando cosas como "¿Puede este usuario eliminar este tipo de elementos? ¿Pueden eliminar solo los suyos o también los de otros? ¿Pueden eliminar elementos publicados?" etc.

John P Bloch John P Bloch
12 abr 2011 19:43:26

No pude entenderlo bien... pero conseguí la funcionalidad que buscaba configurando las capacidades en mi tipo de contenido personalizado y creando esas capacidades en el plugin Members. Te he otorgado las respuestas ya que tu publicación fue la más útil para armar una solución. Gracias

Scott Scott
12 abr 2011 20:03:46
7
21

El registro de tipo de publicación tiene un parámetro llamado "capabilities" que puedes utilizar, por ejemplo:

'capability' => 'organize_shop',

http://codex.wordpress.org/Function_Reference/register_post_type

Para crear un nuevo usuario/rol/capacidad puedes usar add_role, add_cap. Aquí un ejemplo simple para comenzar:

// Añadir el rol a la lista de roles de WordPress
// Luego añadir la capacidad 'organize_shop' al rol 'shop_owner'
$role = add_role( 'shop_owner', 'Dueño de Tienda', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// Si 'shop_owner' ya existe, hacer `$wp_roles` visible y luego
// añadir la capacidad 'organize_shop' al rol 'Dueño de Tienda'
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );

12 abr 2011 18:06:32
Comentarios

hmm... estoy un poco confundido, ¿cuál es la diferencia entre las líneas 2 y 3? :S ¿No añaden la misma capacidad al rol 'Shop Owner'?

dashaluna dashaluna
13 sept 2011 14:36:02

Sí, son lo mismo pero muestran diferentes formas de hacerlo, la primera incluye el rol como primer parámetro (Shop Owner), la segunda solo la capacidad ya que está usando $role.

Wyck Wyck
13 sept 2011 14:43:09

¿Se supone que debes traducir una capacidad/permiso? eso es __('');

Svetoslav Marinov Svetoslav Marinov
4 nov 2015 18:55:41

@SvetoslavMarinov Edité la respuesta para eliminar la traducción.

MikeSchinkel MikeSchinkel
24 feb 2019 05:41:43

@dashaluna Edité la respuesta para aclararla.

MikeSchinkel MikeSchinkel
24 feb 2019 05:51:50

@MikeSchinkel genial

Svetoslav Marinov Svetoslav Marinov
24 feb 2019 10:52:05

register_post_type no tiene un argumento capability, solo tiene capabilities y capability_type

Flimm Flimm
13 jul 2022 14:09:15
Mostrar los 2 comentarios restantes
1

¿Has considerado mirar Gravity Forms o TDO Mini Forms para manejar el envío de contenido? Cada uno tiene funcionalidades que te llevarían bastante lejos en el manejo sensato de contenido enviado por usuarios.

12 abr 2011 16:37:10
Comentarios

Gracias por responder, pero esto no es lo que estoy buscando. Principalmente porque son plugins. Estoy buscando escribir la funcionalidad yo mismo para tener control total sobre todo.

Scott Scott
12 abr 2011 17:09:07
0

Una forma más sencilla y eficiente de lograr esto es instalando un plugin llamado "Advanced Access Manager". No tendrás que escribir la funcionalidad, pero aún así tendrás un buen nivel de control sobre los usuarios, roles y lo que pueden hacer. La mayoría de las cosas que necesitas se pueden lograr con este plugin.

24 feb 2019 10:54:01
0

Sé que es un caso bastante particular, pero me costó una hora resolverlo.

Tenía el plugin: WP Custom Admin Interface activado, donde puedes personalizar el menú de administración para usuarios específicos. Si registras un tipo de publicación personalizada después de haber activado y personalizado el menú, entonces hay un botón en 'Custom Admin Interface' >> 'Admin Menu' que se llama 'Add newly added menu items'. Luego presiona 'Guardar' después de eso, y si el punto del menú es accesible para ese tipo de usuario, entonces funcionará después de eso.

19 ago 2021 10:44:42