找回密码
 免费注册

深入理解 WordPress 角色和权限

[复制链接]
admin 发表于 2020-8-15 14:55:59 | 显示全部楼层 |阅读模式
WordPress 的用户功能管理基于用户所属的角色和角色所具备的权限。
角色是由唯一名称和一组权限组成的,每个权限都可用于定义角色是否可以访问平台的特定功能。
接下来让我们仔细看看 WordPress 角色和权限 的相关内容。
角色的存储
在 WordPress Codex 上提供了默认的角色和功能列表。
数据库会将此列表存储在 wp_options 表中,key 为 wp_user_roles 内容是序列化的对象,类似下面那样。
  1. array(
  2.     'administrator' => array(
  3.         'name'         => 'Administrator',
  4.         'capabilities' => array(
  5.             'switch_themes'          => true,
  6.             'edit_themes'            => true,
  7.             'activate_plugins'       => true,
  8.             'edit_plugins'           => true,
  9.             'edit_users'             => true,
  10.             // [...]
  11.         )
  12.     ),
  13.     'contributor' => array(
  14.         'name'         => 'Contributor',
  15.         'capabilities' => array(
  16.             'delete_pages'           => true,
  17.             'delete_others_pages'    => true,
  18.             'delete_published_pages' => true,
  19.             'delete_posts'           => true,
  20.             // [...]
  21.         )
  22.     ),
  23.     // [...]
  24. );
复制代码
这些数据在创建 WordPress 的时候会自动生成,在 WordPress 加载前会进行读取,大概发生在 plugins_loaded 到 init 之间。

用户绑定角色
角色是完全独立的数据,在创建用户时,会默认给用户设置一个合适的角色,默认情况下是 “订阅者” Subscriber 。
用户所属的角色会保存在 wp_usermeta 表中的 meta_key 为 wp_capabilities 的字段。
它看起来就像下面这样

  1. array(
  2.     'administrator' => true
  3. )
复制代码
请留意,虽然 WordPress 的用户只能有一个角色身份,但是它使用的是一个以数组形式的保存方式,我们稍后会看到这样做的原因。

请记住,wp_capabilities 这个字段中的 wp_ 部分是当前博客的前缀。
(我们可以通过该函数来获取它)。$GLOBALS[‘wpdb’]->get_blog_prefix()


多站点的处理
在使用多站点的情况下,同一个用户可以在不同站点设置为不同的角色,字段前缀和上面介绍的规则相同。
  1. wp_capabilities => a:1:{s:13:"administrator";b:1;}
  2. wp_10_capabilities => a:1:{s:11:"contributor";b:1;}
  3. wp_15_capabilities => a:1:{s:10:"subscriber";b:1;}
  4. [...]
复制代码


弃用的 level
wp_user_level 在 WordPress3.0 版本就已被废弃,它被用来处理旧版本中的 WordPress 的角色。


在代码中使用权限
在 WordPress 的任何地方都可以通过 current_user_can 进行权限的验证。
  1. // 验证当前用户是否有权限激活插件
  2. if (!current_user_can('activate_plugins'))
  3. {
  4.     wp_die('你不能在此站点管理插件,可能没有相关权限.')
  5. }
复制代码



回复

使用道具 举报

 楼主| admin 发表于 2020-8-15 15:10:28 | 显示全部楼层
current_user_can( $capability, $args );
  • $capability参数是必须的,是指给予什么样的能力,或者说给他可以做什么;
  • $args 参数是非必要的,是额外给予的参数,例如:current_user_can('edit_post', 121),意指给他可以编辑编号为121的文章。
  1. if( current_user_can('administrator') ) {

  2.     echo '這個文字只有管理員才能看的到';

  3. }
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|Archiver|手机版|小黑屋|信息共享网

GMT+8, 2024-5-15 17:58 , Processed in 0.079403 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表