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


19

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

因此,管理员应该对除管理员以外的所有用户都设置限制。

怎么做?


您的意思是有些“正面”用户页面不需要访问位于yourdomain.com/wp-admin的任何内容?
curtismchale 2011年

对,就是这样。那有什么问题吗?
罗宾一世骑士

不,只是澄清一下。
curtismchale 2011年

Answers:


19

我们可以admin_init使用该current_user_can()功能来查看用户是否是管理员,以查看当前用户是否可以manage_options,这只能由管理员执行。

当非管理员尝试访问仪表板时,将此代码粘贴到functions.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()使用链接替换上面的代码。


这个答案不符合问题的要求。首先,您要禁止具有“ manage_options”功能的用户访问管理区域,并且可以将一个功能分配给多个角色,而不仅仅是管理员。此外,可以从管理员中删除“ manage_options”功能。
cybmeta 2014年

@cybmeta检查manage_options功能是检查管理员用户的公认方法。甚至Mark Jaquith都这么说
2014年

发问者正好要求检查管理员用户角色,我认为给他准确的答案并解释何时以及为什么更好地检查功能很重要。您说的manage_options是只有“管理员”才能做的事情,这是不正确的,它manage_options是一种功能,可以从管理员角色中删除或分配给其他用户角色。重要的是要知道您想做什么并选择最佳方法。看到我的答案,我解释一下。
cybmeta 2014年

先生,您要+1!:)一直在寻找这个小时!也有一点改进。单点检查就足够了。对于多站点,您需要替换manage_optionsmanage_network。后者还将禁用默认“站点管理员”的仪表板,但保留对超级管理员(网络管理员)的访问权限。
rkeet 2014年

这个答案的主要问题是它与ajax调用冲突。@cybmeta在下面有正确的答案。
RiotAct


9

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

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

 }

这是正确的答案。它不会与ajax调用冲突。
RiotAct

3

试用Adminimize插件。
您可以用它很好地锁定事物。

您也可以尝试通过htaccess文件设置访问权限


1
+1用于管理。那是一个插件的野兽。再加上一些自定义角色管理器插件,它简直是摇摇欲坠。(如果我对个人意见不满意 ::::最后,请注意:除了提供链接以外,请提供更多信息,这将使“答案”更加完整。
brasofilo 2012年

2
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);

4
'administrator'不是一种能力。它仅用于保持向后兼容性。检查'update_core'或其他管理功能。
fuxia

另外,可以将功能分配给角色,因此,如果要允许访问“管理员”用户,则应检查角色而不是功能。
cybmeta 2014年

0

将这些行放在您的 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 );

3
像@toscho一样,说“ administrator”不是一种功能,而应使用“ update_core”之类的管理功能
Pierre

0

尝试此操作,决不要面对最终用户的错误。反对一个好的用户体验。此代码将它们重定向到Home。

    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;
}
}

-1

我将使用WP Frontend并将其设置给每个期望管理员的人。


请提供更多信息,然后提供链接-它使答案更完整
Shea
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.