当前位置: 首页>>技术教程>>正文


如何限制仅向管理员访问仪表板?

webfans 技术教程 , , 去评论

问题描述

我们如何限制除管理员之外的所有用户对WP管理区域的访问?我们网站上的用户拥有自己的个人资料页面,可以完成他们所需的所有功能。

所以管理员应该禁止除管理员以外的所有人。

怎么做?

最佳解决方法

我们可以挂钩到admin_init操作并使用current_user_can()函数检查用户是否是管理员,以查看当前用户是否可以使用manage_options,这只是管理员可以做的事情。

粘贴到functions.php文件中时,此代码将在non-admin尝试访问仪表板时显示消息:

function wpse_11244_restrict_admin() {
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __('You are not allowed to access this part of the site') );
    }
}
add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

如果您愿意,可以通过将用户重定向到主页来提供更好的用户体验($_SERVER['PHP_SELF']检查是为了确保我们不重定向AJAX请求):

function wpse_11244_restrict_admin() {
    if ( ! current_user_can( 'manage_options' )  && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {
        wp_redirect( home_url() );
    }
}
add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

如果要将用户重定向到其配置文件页面,请使用链接替换上面代码中的home_url()

次佳解决方法

您可以编写插件并挂钩到admin_init

该codex实际上给出了您正在寻找的功能的示例。

http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_control

第三种解决方法

在大多数情况下,给出的一些答案可能没问题,但我认为没有一个可以保证完全按照要求进行,因为没有答案检查用户角色,他们检查功能和功能可以分配和删除形式角色。因此,要给出确切的答案,必须检查用户角色,而不是功能:

add_action( 'admin_init', 'allow_admin_area_to_admins_only');
function allow_admin_area_to_admins_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }

      $user = wp_get_current_user();

      if( empty( $user ) || !in_array( "administrator", (array) $user->roles ) ) {
           //Redirect to main page if no user or if the user has no "administrator" role assigned
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

如果要检查用户是否具有”manage_options”功能,则可以。事实上,在大多数情况下,它是最好的选择。虽然默认情况下此功能与管理员用户关联,但可以从管理员角色中删除该功能,也可以将其分配给其他用户角色。这就是为什么在大多数情况下,检查用户可以做什么或不能做什么比检查用户角色更好。因此,在大多数情况下,检查功能应该是选择的方式,但是你很清楚这个概念,并根据你的情况和目的选择最佳选择:

add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }


      if( ! current_user_can( "manage_options" ) ) {
           //Redirect to main page if the user has no "manage_options" capability
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

第四种方法

试试Adminimize插件。你可以把它锁定得很好。

您也可以尝试设置访问through htaccess file

第五种方法

function wpse_11244_restrict_admin() {
    if (!current_user_can('update_core')) {
        wp_die(__('You are not allowed to access this part of the site'));
    }
}

add_action('admin_init', 'wpse_11244_restrict_admin', 1);

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2013.html,转载请务必附带本地址声明。