热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

wordpress权限管理剖析角色和职能

自从wordpress2.0引入角色和职能(RolesandCapabilities),就废弃了用户级别(UserLevel
自从wordpress 2.0引入角色和职能( Roles and Capabilities),就废弃了用户级别(User Level approach)。

主要内容

1.什么是角色和职能(Role and Capabilities)
2.职能和后台管理菜单
3.检查一个用户的职能
4.添加自定义用户角色
5.添加自定义用户职能
6.wordpress职能类(Capability Classes)

1.什么是角色和职能(Role and Capabilities)?

跟其他的CMS,web应用一样,wordpress有一套内建的权限验证系统,验证一个特定的用户是否有足够的权限去执行相应的行为(action).用户(Users)被区分为不同的角色(Role),每种角色被分配相应的职能(Capabilities或Permissions)。
WordPress 使用角色的概念来让博客的所有者对用户进行权限控制。博客所有者可以控制用户写文章、创建页面、管理插件、管理主题,以及管理其他用户的权限。博客所有者可以通过该工具分配用户权限。
下面是wordpress 默认的角色:
Administrator – 系统管理员 Editor – 编辑,可以发布和编辑自己及他人发布的文章 Author – 作者,可以发布和管理他们自己的文章 Contributor –投稿者,他们可以投稿,和管理他们的文章,但是不能发布。 Subscriber – 订阅者,可以阅读评论和接收newsletter
这种角色和职能模式的权限控制系统比使用用户级别来控制权限更加的有弹性,易于扩展。你甚至可以添加更多的角色,而不需要修改默认的设置。 WordPress 插件API允许你添加,移除,改变系统的角色和职能。也就是说,我们可以添加角色,添加职能,重新分配职能给角色。

2.职能和后台管理菜单

几乎每一个插件都需要在管理界面添加至少一个用户配置插件的页面。因而,你需要添加自定义的管理菜单。wordpress里有一系列的方法可以帮你完成这个功能:

// add top level menu
add_menu_page(page_title, menu_title, capability, handle, [function], [icon_url]);
// add sub-menu pages
add_submenu_page(parent, page_title, menu_title, capability, file/handle, [function]);
// add Options sub-menu
add_options_page(page_title, menu_title, capability, handle, [function]);
// add Management sub-menu
add_management_page(page_title, menu_title, capability, handle, [function]);
// add Pages sub-menu
add_pages_page( page_title, menu_title, capability, handle, [function]);
// add Posts sub-menu
add_posts_page( page_title, menu_title, capability, handle, [function]);
// add Appearances sub-menu
add_theme_page( page_title, menu_title, capability, handle, [function]);
你可能已经发现,上面这些函数都有一个必须的参数capability。这意味着登录到后台的用户需要有相应的职能才能够看到这里添加的菜单选项。 如果你的主题或者插件有一个选项页,合理的 控制对该页的访问时非常重要的。例如,如果有一个主题选项页,你需要使用edit_themes这个职能(capability),如果是一个插件选项页,就需要使用edit_plugins职能。另一种方法是为插件和主题选项也使用manage_options这个职能.

3.检查一个用户的职能

检查当前用户是否有足够的职能去执行某些行为(action),可以使用 current_user_can()函数。

if ( current_user_can( $capability ) ) {
// do something if the current user has $capability
}

这个函数还接收一个可选的参数:文章ID($post_id),为了让你能够检查当前用户是否能够对某一篇文章或某一个页面($post_id)进行操作(如:编辑,删除等):

// check whether the current can edit a post with the ID $post_id
current_user_can( 'edit_post', $post_id );

另一个函数author_can( )可以用于检查某个post(可能是文章或者页面或者媒体)的作者是否有相应的职能。

if ( author_can( $post, $capability ) ) {
// do something if the author of the post $post has $capability
}

4.添加自定义用户角色

有时候有必要为你的插件或者整合程序,添加新的角色到系统中。比如说,你编写了一个文档分享的插件,用户注册后可以上传文档,而且我们只允许他们上传文档。这时最好的方法就是添加一个新的自定义角色:

add_role( $role_name, $display_name, $capabilities );// for example:add_role( 'document_uploader', 'Document Uploader', array( 'organize_document' ) );

这个函数添加了一个具有一系列职能的新角色。上面的例子添加了一个新的角色叫做“document_uploader”,显示名称“Document Uploader"及一个职能的集合(在这个例子中,职能名称organize_document)。 当你在处理创建,编辑,上传文档请求时,你需要使用current_user_can()来检查当前用户是否被允许执行相应操作。

if ( current_user_can( 'organize_gallery' ) ) {
// do something
}
被分配了这个角色的用户职能organize_document,但是不能edit_posts或者publish_posts. 如果你想要移除一个角色,可以使用 remove_role( ):

remove_role( 'photo_uploader' ); 当插件使用者决定卸载你的插件时,你需要给插件使用者提供一个选项来移除这个自定义的角色。 但是,如果你想要给已经存在的用户添加职能应该怎么办?

5.添加自定义用户职能

还是拿上面的例子来说,假如我们的文档分享插件,需要让已有用户角色(如administrator,editor)拥有organize_document的权限,那么应该怎么做?

// get the "author" role object
$role = get_role( 'author' );// add "organize_gallery" to this role object
$role->add_cap( 'organize_document');

下一篇我们 将介绍:

WordPress Capability Classes


转:https://www.cnblogs.com/phpcode/archive/2012/02/29/2522705.html



推荐阅读
  • SoIhavealoopthatrunsperfectforeventsandonlyshowsfutureposts.TheissueisthatIwould ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • PHP WEB项目文件夹上传下载解决方案
    PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploadsonoff是否允许通过http方式上传文件2.max_execution_time3 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
author-avatar
手机用户2502922083
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有