检查用户是否按用户ID为管理员

时间:2016-08-27 作者:jmeinlschmidt

如何检查用户(by user ID) 是管理员吗?我不是指当前登录的用户。

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

您将其措辞为要检查用户是否具有管理员角色。检查与特定行动相关的能力被认为更合适。

实际上,这通常表示为current_user_can( \'manage_options\' ) 对于当前用户。对于任意用户user_can( $user_id, \'manage_options\' ).

当然,这是代表站点一般配置的功能。根据您的用途,您可能需要使用其他用途,请参见中的列表roles and capabilities documentation.

SO网友:bravokeyl

您可以使用get_userdata()get_user_by() 通过传递用户id,yo可以获得用户对象。从中获得角色。

$user = get_userdata( $user_id );
if(!empty( $user ) && $user){
   $user->roles // this contains the role here check for whatever role you need
}
你可以检查这个answer 更多信息

SO网友:bynicolas

我只是补充一下“稀有答案”。

从技术上讲,您可以为这些函数提供角色名称,因此current_user_can( \'administrator\' )user_can( $user_id, \'administrator\' ) 也可以,但它是discouraged.

虽然部分支持针对特定角色而不是功能进行检查,但不鼓励这种做法,因为它可能会产生不可靠的结果。

注意:如果当前用户是超级管理员,则将始终返回true,除非明确拒绝。

您可以在不依赖这些功能的情况下检查角色(因为它们不可靠),但正如@Rarst所说,检查功能而不是角色更合适。

使用功能而不是角色的一个主要优势如下。

例如,您的站点上有多个管理员。假设你希望你的客户是管理员,你也是网站的管理员。

现在,您的客户端对其站点具有管理权限是有道理的,但您可能不希望他/她能够在站点上安装插件。那将是你作为网站管理员的工作。

因此,如果您检查角色,您将无法禁用/启用everyone 在该角色范围内。

现在,如果您使用功能,您将在授予/限制用户执行特定操作方面拥有更大的粒度。

回到我的场景,如果你想给你的客户机管理员权限,但不能安装插件,那就简单到

add_filter( \'user_has_cap\', \'client_admin_cap_filter\', 10, 3 );
function client_admin_cap_filter( $allcaps, $cap, $args ){

  // the requested capability and our client user id 
  if ( \'install_plugins\' == $args[0] && $args[1] == 2 ) 
    $allcaps[ $cap[0] ] = false;
  
  return $allcaps;
}
例如,我们可以提供一系列想要限制的不同功能update_core, manage_options, install_plugins, install_themes

我们的功能仍然很简单

add_filter( \'user_has_cap\', \'client_admin_cap_filter\', 10, 3 );
function client_admin_cap_filter( $allcaps, $cap, $args ){

  $restricted_cap = array( 
    \'update_core\',
    \'manage_options\',
    \'install_plugins\',
    \'install_themes\',
     // etc.
  );

  foreach( $restricted_cap as $r_cap ){

    // the requested capability and our client user id 
    if ( $r_cap == $args[0] && $args[1] == 2 ) 
      $allcaps[ $cap[0] ] = false;

  } 
  
  return $allcaps;
}
如您所见,这非常有效,不需要特殊角色,不添加额外的DB查询,在运行时执行,并且易于扩展和维护。

如果你的逻辑依赖于一个角色,那么祝你好运,目标是特定的用户、场景或诸如此类的东西,而不必为了跟上所有可能的用例而大惊小怪或创建无数个角色。

有关user_has_cap 滤器

相关推荐

对用户wp-admin中的新列进行排序

我在用户管理选项卡中创建了一个新列,名为;列表;。每一行都是一个数字,表示用户有多少个列表。//// ADD THE NEW COLUMN add_filter( \'manage_users_columns\', \'add_listing_count_column\' ); function add_listing_count_column( $columns ) { $columns[\'Listings\'] = \'Listings\'; //