下面是wordpress 默认的角色:
Administrator – 系统管理员
Editor – 编辑,可以发布和编辑自己及他人发布的文章
Author – 作者,可以发布和管理他们自己的文章
Contributor –投稿者,他们可以投稿,和管理他们的文章,但是不能发布。
Subscriber – 订阅者,可以阅读评论和接收newsletter
这种角色和职能模式的权限控制系统比使用用户级别来控制权限更加的有弹性,易于扩展。你甚至可以添加更多的角色,而不需要修改默认的设置。
插件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.检查一个用户的职能// do something if the current user has $capability
}
// do something if the author of the post $post has $capability
}
// 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.添加自定义用户职能// add "organize_gallery" to this role object $role->add_cap( 'organize_document');