阻止编辑者编辑/删除管理员帐户

时间:2013-01-11 作者:Sam

我需要编辑器能够添加/编辑/删除其他用户。使用类似于以下内容的代码很容易为他们提供这些功能:

$editor = get_role(\'editor\');
$editor->add_cap(\'edit_users\');
问题是,当他们拥有添加/编辑/删除其他用户所需的权限时,他们还可以对管理员用户执行所有这些操作和/或将自己提升为管理员角色。

是否有办法允许他们仅添加/编辑/删除指定的用户角色(最佳情况)?或者,作为替代方案,阻止编辑器对管理员帐户执行任何操作,甚至可能从列表视图中完全隐藏这些帐户?

1 个回复
SO网友:Andy Adams

WordPress使用的函数名为get_editable_roles, 它(我认为)用于确定特定用户可以编辑哪些角色。此函数的源如下所示:

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters(\'editable_roles\', $all_roles);

    return $editable_roles;
}
因此,看起来您可以挂接到*editable\\u roles*过滤器中,以获取您要查找的内容。类似这样:

function wpse_80220_filter( $roles ) {
    $current_user = wp_get_current_user();

    if ( in_array( \'editor\', $current_user->roles ) ) {
        unset( $roles[\'administrator\'] );
    }

    return $roles;
}
add_filter( \'editable_roles\', \'wpse_80220_filter\' );
我还没有测试上面的任何代码,但请使用它,并让我知道它是否成功!

结束

相关推荐

PHP致命错误:无法为wp-includes/capabilities.php中的非对象调用重载函数

我在apache日志中遇到了太多以下错误。PHP Fatal error: Cannot call overloaded function for non-object in wp-includes/capabilities.php on line 1187这是函数current\\u user\\u can($capability)的内部,第1187行如下所示:$current_user = wp_get_current_user(); 我不知道问题出在哪里?