Solución al error "No tienes permisos suficientes para acceder a esta página" en WordPress

21 ene 2013, 20:00:33
Vistas: 14.7K
Votos: 6

Tengo una instalación multisitio con WP 3.5. Mi sitio principal y algunos otros blogs en la red funcionan bien. Sin embargo, si registro un nuevo usuario y sitio, ese usuario recibe el error "No tienes permisos suficientes para acceder a esta página" cada vez que intenta visitar el panel de administración del sitio. La parte pública del sitio funciona correctamente.

Cuando reviso el usuario en la interfaz de Administrador de la Red, se muestra que es administrador de ese sitio. Si agrego al Administrador de la Red al sitio, puedo ver el área de administración.

He probado las soluciones habituales como desactivar y eliminar todos los plugins, activar el tema Twenty Twelve y reinstalar el núcleo de WP. Nada de esto funciona. ¿Cómo puedo solucionar esto?

0
Todas las respuestas a la pregunta 5
3
10

Pasé varias horas de mi sábado buscando este error. No pude encontrar una guía en internet que describiera mi solución eventual. Aquí está mi solución.

En el núcleo de WP, el error "No tienes permisos suficientes para acceder a esta página" se genera al final de /wp-admin/includes/menu.php. Un grep en mis directorios de plugins también mostró que varios plugins podían generar este error.

Haz una copia de seguridad de menu.php, y reemplaza el código dentro del bloque if en las líneas 224-227 (en la versión 3.5) con lo siguiente:

if ( !user_can_access_admin_page() ) {
   $a = array(
       'Páginas Sin Acceso' => $_wp_menu_nopriv,
       'Información de Usuario' => $current_user,
       'Roles' => $wp_roles->get_names(),
   );
   $s = sprintf("\n<br /><pre>%s</pre>", print_r($a, true));
   do_action('admin_page_access_denied');
   wp_die( __('No tienes permisos suficientes para acceder a esta página.'.$s) );
}

¡NO dejes este código activo en tu sitio a menos que estés depurando activamente! Reemplázalo con la copia de seguridad de menu.php si necesitas alejarte por un tiempo.

Intenta acceder nuevamente al área de administración. Esta página de error te dirá algunas cosas:

  1. Si obtienes salida adicional en tu página de error, esto te indica que el fallo está siendo generado por el núcleo de WP. En mi caso así fue. Si no obtienes salida adicional, sabes que necesitas buscar el plugin que está causando el error.
  2. Cualquier página en el arreglo Páginas Sin Acceso establecida en 1 no es accesible para el usuario. En mi caso, todas las páginas estaban en 1.
  3. En Información de Usuario, verifica si el usuario tiene los roles y capacidades correctos. En mi caso, el usuario tenía un rol de 10 y las capacidades que debería tener como administrador.
  4. En Roles verás una lista de roles definidos para el sitio. En mi caso, no tenía roles definidos. Ahí estaba mi problema.

En mi caso, pude navegar por mi base de datos en phpMyAdmin, y buscar la entrada [WPDB_PREFIX]_[SITENO]_user_roles en la tabla [WPDB_PREFIX]_[SITENO]_options. Había cambiado mi WPDB_PREFIX, pero algún plugin había creado un rol de usuario personalizado y lo había escrito con el prefijo por defecto wp_. Pude copiar la entrada de un sitio funcional al sitio que no funcionaba. Tan pronto como lo hice, el administrador pudo acceder inmediatamente al sitio.

Mi instalación fue más complicada porque estaba usando el plugin de plantillas de blogs nuevos, y mi sitio plantilla también tenía su base de datos corrupta de la misma manera.

Espero que esto ayude.

21 ene 2013 20:00:33
Comentarios

¡Excelente solución! ¿Crees que si hubieras hecho un buscar/reemplazar en el prefijo defectuoso eso lo habría resuelto? PD: deberías enviar montones de desprecio a esos desarrolladores - o al menos una firme reprimenda :)

akTed akTed
21 ene 2013 21:33:19

Si hubiera sabido desde el principio cuál era la causa raíz del problema, sí, podría haberlo hecho. Mi problema fue que después de 2 horas de mi mejor Google-FU todo lo que pude encontrar fueron variaciones del consejo "desactiva todos los plugins". Actualizaré esto si logro identificar al culpable.

cpilko cpilko
21 ene 2013 21:41:13

Gracias, me ayudó.

Alyas Alyas
20 ago 2020 21:46:01
0

Al migrar desde una instalación multisitio, el problema se debía a que los roles se nombran según las tablas de la base de datos. Así que resolví mi problema cuando renombré la opción wp_7_user_roles a wp_user_roles.

2 feb 2016 16:54:42
0

Después de probar varias soluciones, incluyendo el manejo de capacidades, nada parecía funcionar. Finalmente, volví a verificar el tamaño de la tabla wp_usermeta en el entorno de producción (live) en comparación con la de localhost y descubrí que la carga había sido truncada y faltaban algunos valores. Vacié la tabla y volví a cargar completamente los metadatos de usuarios desde cero. WordPress funcionó inmediatamente después de la carga. Espero que esto le ahorre tiempo a alguien más.

11 nov 2014 21:54:07
1

Yo también tuve problemas con esto.

Lo que quería era darle a un usuario permisos de Administrador pero eliminar ciertos menús de la barra lateral del backend de administración.

Eliminé AAM porque estaba causando problemas de permisos y en su lugar usé Menu Editor Pro. Todo funciona perfectamente.

Por supuesto, esta no es la forma más segura de hacerlo, todavía permite el acceso a las páginas de administración ocultas escribiendo manualmente las URLs, pero mi cliente no sabría cómo llegar allí de todos modos, así que esto funciona.

23 nov 2014 01:44:00
Comentarios

Esto no resuelve realmente el problema, pero como ya empezaste a compartir conocimiento, quizás quieras intentar ayudar a alguien con una pregunta más reciente (ya que esta es bastante antigua) :)

kaiser kaiser
23 nov 2014 02:35:57
0

El problema de permisos está relacionado con las siguientes tablas.

Tabla [prefix]_usermeta

Las filas con la columna meta_key deben reflejar el prefijo de la siguiente manera.

[prefix]_capabilities
[prefix]_user_level

Tabla [prefix]_options

La fila única con la columna option_name debe reflejar el prefijo de la siguiente manera.

[prefix]_user_roles
6 jul 2021 12:39:01