如何将仪表板访问权限仅限于管理员?

时间:2011-03-05 作者:Robin I Knight

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

所以除了管理员之外,管理员应该禁止所有人访问。

如何做到这一点?

8 个回复
SO网友:shea

我们可以钓到admin_init 操作并使用检查用户是否为管理员current_user_can() 函数查看当前用户是否可以manage_options, 这是只有管理员才能做到的。

将此代码粘贴到函数中时。php文件,当非管理员尝试访问仪表板时,将显示一条消息:

function wpse_11244_restrict_admin() {

    if ( defined( \'DOING_AJAX\' ) && DOING_AJAX ) {
        return;
    }

    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 );
如果愿意,您可以通过将用户重定向到主页来提供更好的用户体验:

function wpse_11244_restrict_admin() {

    if ( defined( \'DOING_AJAX\' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( \'manage_options\' ) ) {
        wp_redirect( home_url() );
        exit;
    }
}

add_action( \'admin_init\', \'wpse_11244_restrict_admin\', 1 );
如果要将用户重定向到其配置文件页面,请替换home_url() 在上面的代码中使用链接。

SO网友:Wietse Venema

您可以编写一个插件并挂接到admin_init.

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

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

SO网友:cybmeta

在大多数情况下,给出的一些答案可以很好,但我认为没有一个答案可以保证完全按照要求执行,因为没有一个答案检查用户角色,它们检查功能,并且可以从角色中分配和删除功能。因此,要给出准确的答案,必须检查用户角色,而不是功能:

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\\u 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();
      }

 }

SO网友:goofydg1

尝试Adminimize 插件<你可以用它把事情锁定得很好。

您也可以尝试设置accessthrough htaccess file

SO网友:Gabi
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);
SO网友:Junaid Munir

把这些线放在你的functions.php

function baw_no_admin_access()
{
 if( !current_user_can( \'administrator\' ) ) {
     wp_redirect( home_url() );
     die();
  }
}
add_action( \'admin_init\', \'baw_no_admin_access\', 1 );

SO网友:Ahmad Awais

试试这个,不要在最终用户面前犯错误。针对良好的用户体验。此代码将它们重定向到主页。

    add_action( \'init\', \'blockusers_init\' );
function blockusers_init() {
if ( is_admin() && ! current_user_can( \'administrator\' ) &&
! ( defined( \'DOING_AJAX\' ) && DOING_AJAX ) ) {
wp_redirect( home_url() );
exit;
}
}

SO网友:Benny

我会使用WP Frontend 并为除管理员以外的所有人设置。

结束

相关推荐

如何保护wp-admin免受第三方访问?

wordpress管理面板和登录页面wp如何登录。php是否被隐藏,以便只有网站管理员才能访问?URL是否可以通过某种mod\\u重写规则重写,而不用担心破坏任何东西(抛开所有插件)?最好的解决方案不应基于IP地址,这意味着管理员只能从一台或一组计算机访问网站。