记录日常点点滴滴,欢迎来到我的小站。

0%

Wordpress 管理用户角色和权限

创建和删除用户角色

WordPress 用户角色具有可扩展的特点。你可以添加或者是删除一个角色,添加一个角色很简单,你只需要一个角色的标签名字,一个显示名字,然后再加上用户权限就够了。

1
2
3
4
5
6
add_action( 'init', 'wptuts_addrole' );

function wptuts_addrole() {
add_role( 'uploader', 'Uploader', array('upload_files') );
add_role( 'link_manager', 'Link Manager', array('manage_links') );
}

如果你检查用户设置页面,(选择一个用户进入编辑模式),你就会发现你新添加的一个角色已经可用了。它是以你拟定的显示名称出现在屏幕上的。

有一件事必须提醒一下,用户角色的创建只要做一次就好了。也就是说,如果你像上面给出的代码那样,挂钩到 “init” 动作,你其实就在重新创建一个用户角色了。每运行一次,就重建一次。这并不是什么好事情。在实际运用中,你只需要一次性把用户角色创建完就可以了。然后你就可以挂钩到到插件的激活钩子,以确保当禁用插件的时候可以去除该角色。

去除用户角色也是很直接的事情,你只需要用到角色的标签名字。

1
2
3
4
5
6
add_action( 'init', 'wptuts_removerole' );

function wptuts_removerole() {
remove_role( 'uploader' );
remove_role( 'link_manager' );
}

给用户角色添加权限

和用户一样,用户角色也有一个特定的类别:WP_Role。但是,初始化这个类别需要用到角色名称和角色的权限,

WordPress 还提供了另外一个函数 get_role() ,这个函数只需要角色名字和你的初始化类别。

1
2
3
4
5
6
add_action('init', 'wptuts_getrole');

function wptuts_getrole() {
$role = get_role('editor');
var_dump($role);
}

返回的目标有两个属性和三个规则

WP_Role 属性
capabilities 一个表示用户权限的数组。
name 角色名字

WP_Role 规则
add_cap() 添加权限到用户角色目标值。
has_cap() 适合用户是否具有某种权限。
remove_cap() 去除角色的权限。

检查权限

设定好的用户角色和权限,如果你不用,就只是个摆设而已。你应该强制在你的插件和主题上使用,在执行代码之前先检查一下。你应该总是检查权限,而不是角色。一个角色为“编辑”的用户不能保证一直都是 WordPress 默认的权限,因为这是可以被别的插件或者是博客主修改的。

WordPress 上有三个函数用来检查权限,而这三个函数在某种程度上来说是可以替换的。

current_user_can()
user_can()
author_can()
current_user_can() 这个函数是用来检查目前用户是否有特定的权限的。也允许一个帖子或者是目标检查 meta 权限。

user_can() 差不多是和上面一样用的,但是你可以指定特定的ID。但是这个函数不会检查 meta 权限。所以如果你需要检查一个用户的 meta 权限和现在的用户是不是一样,那就不好用了。为了达到这个目的,你可以使用 author_can() 函数来检查,看看基于某个权限和 post ID 的用户是否可以完成特定的项目。

1
2
3
4
5
6
7
8
// checks if the post author of the first post can publish the post
if ( author_can( 1, 'publish_posts') ) {
publish_post_function(); // publish the post
}
else {
echo "You don't have the right to publish the post";
}