删除管理员删除管理员的权限

时间:2012-12-27 作者:Ben Racicot

我一直在研究角色和功能,并使用和编写了一系列很棒的代码来创建独特的功能和角色。我已经创建了一个“主编辑器”角色来维护几乎所有功能的用户。。。但是,编辑用户(&U);delete\\u users显然允许编辑器对用户进行CUD,包括现有管理员。。。

目前,我对编码很熟悉,对编辑用户很有信心。php,但我必须接近解决方案:

if ( ! current_user_can( \'delete_users\' ) ) 
// or is trying to delete an admin\'s $userids 
wp_die(__(\'You can’t delete users.\')); // or administrators

$update = \'del\';
$delete_count = 0;

foreach ( $userids as $id ) {
    if ( ! current_user_can( \'delete_user\', $id ) )
        wp_die(__( \'You can’t delete that user.\' ) );

    if ( $id == $current_user->ID ) {
        $update = \'err_admin_del\';
        continue;
    }
    switch ( $_REQUEST[\'delete_option\'] ) {
    case \'delete\':
        wp_delete_user( $id );
        break;
    case \'reassign\':
        wp_delete_user( $id, $_REQUEST[\'reassign_user\'] );
        break;
    }
    ++$delete_count;
}
我不知道如何检查所讨论的$userid是否是管理员用户ID。因为如果可以,我可以将其添加到die。。。我走对了吗?提前谢谢。

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

你的问题似乎可以归结为这一点

我不知道如何检查所讨论的$userid是否是管理员用户ID。

尝试

user_can($id,\'administrator\')

http://codex.wordpress.org/Function_Reference/user_can

这个Codex has a warning 关于将角色名称用于current_user_can 功能和it is very similar to user_can 因此,我认为在对相互冲突的指令进行排序之前,谨慎是必须的。

不要将角色名称传递给当前的\\u user\\u can(),因为这不能保证正常工作。

同一页还说:

$能力(字符串)(必需)能力或角色名称默认值:无

As does the source:

参数字符串$能力能力或角色名称users.php 不是的this users.php 是吗?如果是的话,这是一条维护性很高的路径。

SO网友:brasofilo

@s\\u ha\\u dum写得很好。我将扩展他关于文档中矛盾的回答。

最近我在处理current_user_can, 进行了一些研究,得出了以下函数:

/**
 * Function name grabbed from: http://core.trac.wordpress.org/ticket/22624
 * 2 lines of code from TutPlus: http://goo.gl/X4lmf
 */
if( !function_exists( \'current_user_has_role\' ) )
{
    function current_user_has_role( $role )
    {
        $current_user = new WP_User( wp_get_current_user()->ID );
        $user_roles = $current_user->roles;
        $is_or_not = in_array( $role, $user_roles );
        return $is_or_not;
    }
}

结束

相关推荐