Roles y capacidades de WordPress: Los fundamentos
Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)
Esta es una serie de tutoriales de cuatro partes que cubre el tema de los usuarios, los roles y las capacidades de WordPress. La serie cubrirá la arquitectura y el diseño de los roles de usuario en WordPress; destacará las funciones más importantes para interactuar con los usuarios y para administrar roles y capacidades; y en el último tutorial, vamos a crear un ejemplo de la vida real que demuestra la utilidad de esta API.
Introducción
En esta primera parte, recorreremos los conceptos básicos y el funcionamiento interno de los usuarios, los roles y el sistema de capacidades de WordPress. No se tratarán funciones ni código en esta parte. Así que si estás interesado solo en escribir código que interactúe con este sistema puedes saltar a la siguiente parte. Sin embargo, te recomiendo encarecidamente que primero leas esta para tener una idea básica sobre los usuarios y roles en WordPress.
Después de la versión 2.0, WordPress introdujo un nuevo sistema de roles y capacidades que reemplazó al sistema de nivel de usuario anterior. El sistema más antiguo no se explicará; ahora está completamente en desuso (desde la versión 3.0) y ya no debe usarse.
El nuevo sistema es más avanzado y flexible. Ahora es posible crear permisos personalizados y asignarlos en base al usuario. Esta actualización llegó para abordar las deficiencias del modelo antiguo y para permitir a los desarrolladores construir plugins y temas más potentes y personalizados.
Arquitectura de base de datos para usuarios
-
Esquema de las tablas de usuarios
WordPress mantiene los datos de los usuarios en dos tablas:
wp_usersywp_usermeta(asumiré durante toda esta serie que tus ajustes de WordPress utilizan el prefijowp_predeterminado). La segunda tabla se crea para ampliar la primera y permite a los desarrolladores adjuntar datos adicionales a cada usuario.Si solo huviese una tabla, no podrías adjuntar más datos a los usuarios o tendrías que mantener todos estos datos serializados en una fila de columna que no es del todo bueno para el rendimiento y la escalabilidad. (imagina el caso de tener 50 plugins donde cada uno añade 2 o 3 campos extra por usuario.)
A continuación se muestra un diagrama del esquema de las dos tablas. Las tablas están vinculadas entre sí con una relación de "uno a muchos". De hecho, puedes tener tantas filas como desees en
wp_usermetacon el mismouser_id(que es la clave externa para esta relación y representa la columna ID enwp_users)

-
Dentro de las tablas
Si examinamos el esquema de estas dos tablas, podemos concluir que wp_users se utiliza para contener una cantidad limitada y finita de datos sobre cada usuario. Algunos de ellos son requeridos y utilizados principalmente por el núcleo de WordPress, los temas o los plugins como el inicio de sesión, la contraseña, el correo electrónico y el nombre (o alias). Pero no es el caso del campo user_url, por ejemplo. Este campo podría caber en la tabla de wp_usermeta, ya que no es necesario.
Algunos campos obligatorios se almacenan en wp_usermeta como el alias. Bueno, en realidad. yo solo soy consciente de este. Sin embargo, algunas informaciones críticas como las capacidades del usuario, el nivel de usuario y el modo SSL también se almacenan en la tabla wp_usermeta. Esto no hace que sea menos importante que la tabla wp_users (especialmente cuando los permisos y la seguridad son de gran preocupación).
Dicho esto, debes tener cuidado al tratar con ambas tablas. Te recomendaría que te adhieras a las funciones de WordPress para interactuar con los usuarios y el sistema de capacidades.
Roles y capacidades en WordPress
Como cualquier otro CMS, WordPress cuenta con un sistema de permisos de usuario para establecer y restringir los privilegios de cada usuario. En esta sección, voy a explicar el concepto detrás de los roles y las capacidades en WordPress. Así que si te has sentido confuso con la explicación del Codex, espero que este tutorial te lo clarifique dado que me estoy aproximando al concepto de manera diferente.
-
Una visión general sobre las capacidades
Olvídate de los roles. Supongamos por unos minutos que no existen.
Vamos a imaginar el siguiente escenario: Tienes un blog de WordPress que configuraste recientemente, y tú eres su administrador. (Así que tienes todo el poder posible sobre él.) Decidiste añadir un nuevo usuario a tu blog para que aporte algunas entradas al blog. También pensaste que sería justo permitirle realizar comentarios y personalizar el nombre que se mostrará para él.
A continuación se muestra una imagen de nuestro usuario con las capacidades que le han sido asignadas.


Así que es tan simple como eso. Asignar capacidades a los usuarios. Tú eres libre de nombrar estas capacidades. Por ejemplo, podrías denominar "escribir_nuevo_post" como slug para escribir una nueva entrada.
En tu blog, tendrás una lista de capacidades, y cada una otorga un poder especial y limitado a los usuarios que las tienen asignadas. Cada usuario puede tener un número limitado de capacidades. Un usuario que tenga todas las capacidades es un administrador, ya que puede hacer casi todo. Considéralo como un sistema de permisos y las capacidades como los permisos que estás otorgando a los usuarios.
Pero, ¿por qué importan las capacidades? Bueno, tú eres el responsable de eso. Por ejemplo, en el caso de que estés construyendo tu propio plugin (o tema), podrías crear tu propia capacidad de "
aceso_panel_control" y asignarla a varios usuarios.Cuando un usuario solicite tu "Panel de control", debes comprobar que el usuario tenga la capacidad de "
aceso_panel_control" antes de mostrar la página del panel de control. También podrías comprobar si existe capacidad antes de ejecutar un fragmento de código determinado para asegurarte de que el usuario tenga los privilegios necesarios.WordPress viene con un número predeterminado de capacidades que son necesarias para su funcionamiento. También puedes hacer uso de estas capacidades, pero ten cuidado de no eliminarlas. Sin duda puedes crear tus propias y personalizadas capacidades.
-
Cómo entran en juego los roles
Así que ahora sabemos qué son las capacidades. Vamos a imaginar otro escenario, en el cual tienes un montón de usuarios. Deseas dividir estos usuarios en dos grupos: usuarios con poder y usuarios con menos poder. Cada grupo de usuarios tendrá capacidades especiales.
Para ello, debes asignar estas capacidades a cada usuario, lo que puede resultar un poco frustrante e improductivo. Los roles se crean exactamente por ello, son aquello mediante lo cual se agrupa a los usuarios.
Por lo tanto, en lugar de asignar capacidades a los usuarios, se asignan a roles; y, a continuación, se asignan estos roles a los usuarios. No obstante, es posible asignar capacidades directamente a los usuarios. Se puede crear un rol para uno o varios usuarios; y un usuario puede no tener ninguno, tener uno o tener varios roles.
Así que la realidad es mucho más o menos esta.


Es importante tener en cuenta aquí que debes comprobar si existe una capacidad de usuario y no un rol de usuario antes de ejecutar código que requiera permiso. Nunca asumas que un rol tiene una capacidad concreta porque esto podría haber sido modificado por otro plugin o tema.
-
Capacidades meta
Existen acciones que requieren varias capacidades. Por ejemplo, para editar una entrada de blog, necesitas la capacidad "
edit_post". ¿Pero qué pasa si esta entrada de blog fue creada por otro usuario? En ese caso, necesitarás también la capacidad "edit_other_posts". Por lo tanto, antes de dejar que el usuario edite la entrada, debes comprobar ambas.Ahí es donde entran en juego las capacidades meta. WordPress tiene una función
map_meta_cap()que devuelve una matriz de las capacidades necesarias para ejecutar una capacidad determinada.Así que volvamos al ejemplo anterior. Supongamos que tenemos un usuario con un ID de 3, y queremos comprobar si este usuario puede editar una entrada de blog con un ID de 5. Esta entrada de blog ha sido publicada por otro usuario con un ID de 6.
En este caso, la función
map_meta_cap()devolverá una matriz con las siguientes capacidades:edit_post,edit_published_postsyedit_other_posts. Para crear esa matriz, la funciónmap_meta_cap()debe realizar algunas comprobaciones basadas en el usuario y la entrada.Las capacidades predeterminadas que comprueba la función son '
delete_user', 'edit_user', 'remove_user', 'promote_user', 'delete_post', 'delete_page', 'edit_post', 'edit_page', 'read_post' o 'read_page'. Es posible, sin embargo, aumentar esta lista con las tuyas propias enganchando al filtro 'map_meta_cap'.
Conclusión
Así que eso fue todo, en pocas palabras, los usuarios y el sistema de permisos en WordPress. He tratado de mantenerlo lo más simple y minimalista posible; y por ese motivo, he evitado incluir cualquier clase de código. En la siguiente parte, analizaremos una amplia gama de funciones que WordPress proporciona para interactuar con este sistema.



