WordPress 的用户功能管理基于用户所属的角色和角色所具备的权限。
角色是由唯一名称和一组权限组成的,每个权限都可用于定义角色是否可以访问平台的特定功能。
接下来让我们仔细看看 WordPress 角色和权限 的相关内容。
角色和权限的介绍
角色的存储
在 WordPress Codex 上提供了默认的角色和功能列表。
数据库会将此列表存储在 wp_options 表中,key 为 wp_user_roles 内容是序列化的对象,类似下面那样。
array( 'administrator' => array( 'name' => 'Administrator', 'capabilities' => array( 'switch_themes' => true, 'edit_themes' => true, 'activate_plugins' => true, 'edit_plugins' => true, 'edit_users' => true, // [...] ) ), 'contributor' => array( 'name' => 'Contributor', 'capabilities' => array( 'delete_pages' => true, 'delete_others_pages' => true, 'delete_published_pages' => true, 'delete_posts' => true, // [...] ) ), // [...] );
这些数据在创建 WordPress 的时候会自动生成,在 WordPress 加载前会进行读取,大概发生在 plugins_loaded 到 init 之间。
用户绑定角色
角色是完全独立的数据,在创建用户时,会默认给用户设置一个合适的角色,默认情况下是 “订阅者” Subscriber 。
用户所属的角色会保存在 wp_usermeta 表中的 meta_key 为 wp_capabilities 的字段。
它看起来就像下面这样
array( 'administrator' => true )
请留意,虽然 WordPress 的用户只能有一个角色身份,但是它使用的是一个以数组形式的保存方式,我们稍后会看到这样做的原因。
请记住,wp_capabilities 这个字段中的 wp_ 部分是当前博客的前缀。
(我们可以通过该函数来获取它)。$GLOBALS[‘wpdb’]->get_blog_prefix()
多站点的处理
在使用多站点的情况下,同一个用户可以在不同站点设置为不同的角色,字段前缀和上面介绍的规则相同。
wp_capabilities => a:1:{s:13:"administrator";b:1;} wp_10_capabilities => a:1:{s:11:"contributor";b:1;} wp_15_capabilities => a:1:{s:10:"subscriber";b:1;} [...]
弃用的 level
wp_user_level 在 WordPress3.0 版本就已被废弃,它被用来处理旧版本中的 WordPress 的角色。
在代码中使用权限
在 WordPress 的任何地方都可以通过 current_user_can 进行权限的验证。
例如:
// 验证当前用户是否有权限激活插件 if (!current_user_can('activate_plugins')) { wp_die('你不能在此站点管理插件,可能没有相关权限.') }