日星网 windows 中文论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 347|回复: 0

Wordpress 管理用户角色和权限

[复制链接]
发表于 2016-5-5 08:50:37 | 显示全部楼层 |阅读模式
1. 创建和删除用户角色

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

  2. function wptuts_addrole() {
  3.     add_role( 'uploader', 'Uploader', array('upload_files') );
  4.     add_role( 'link_manager', 'Link Manager', array('manage_links') );
  5. }
复制代码


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

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

去除用户角色也是很直接的事情,你只需要用到角色的标签名字。
  1. add_action( 'init', 'wptuts_removerole' );

  2. function wptuts_removerole() {
  3.     remove_role( 'uploader' );
  4.     remove_role( 'link_manager' );
  5. }
复制代码


2. 给用户角色添加权限

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

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

  2. function wptuts_getrole() {
  3.     $role = get_role('editor');
  4.     var_dump($role);
  5. }
复制代码


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

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


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


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

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

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


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

  1. // checks if the post author of the first post can publish the post
  2. if ( author_can( 1, 'publish_posts') ) {
  3.     publish_post_function(); // publish the post
  4. }
  5. else {
  6.     echo "You don't have the right to publish the post";
  7. }
  8. 结语
复制代码
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|小黑屋|日星网 ( 黑ICP备07001742号 )

GMT, 2018-11-19 07:51 AM , Processed in 0.018324 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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