Plugin capabilities

时间:2014-05-15 作者:Cryalex

我创建了一个界面,允许用户执行一定数量的操作,每个操作都有相关的功能(包括访问该界面)。我想有一个基本的能力(这里是原始的?)如果用户想要执行所有其他操作,则需要具备:如果用户可以删除项目,则用户还必须能够访问该界面。

有几个插件允许添加/删除功能:我想防止出现用户可以删除但无法访问界面的情况。

我知道,由于帖子类型、元功能和map\\u meta\\u cap filter,我很难将其应用到我的插件中。

我可以一直检查这两个选项,但权限层次结构最终会更加复杂(比如,3个级别-用户必须具有访问\\u界面、创建\\u项和创建\\u typeX\\u项的功能,才能创建类型为X的项),因此,在所有地方复制代码而不是只检查一个功能(在我的示例中:创建\\u typeX\\u项)听起来很愚蠢。我没有处理自定义帖子类型,它不是一个选项,因此我不知道use map\\u meta\\u cap筛选器在这种情况下是否相关,如果相关,我也不知道如何使用它。

有什么建议吗?

1 个回复
最合适的回答,由SO网友:Cryalex 整理而成

public function myplugin_role_has_cap($capabilities, $cap, $args) {
    if(!isset($capabilities[\'myplugin_access\'])) {
        unset($capabilities[\'myplugin_delete_item\']);
    }
    return $capabilities;
}add_filter(\'user_has_cap\', array($this, \'myplugin_role_has_cap\'), 0 , 3);
这里有一个更好的答案,与我的例子相对应。假设插件在激活时向一个角色添加了两个上限,之后由于某些原因,访问上限被撤销。然后,即使只有delete\\u item cap,用户也无法删除,因为没有授予访问权限。

结束

相关推荐

PHP致命错误:无法为wp-includes/capabilities.php中的非对象调用重载函数

我在apache日志中遇到了太多以下错误。PHP Fatal error: Cannot call overloaded function for non-object in wp-includes/capabilities.php on line 1187这是函数current\\u user\\u can($capability)的内部,第1187行如下所示:$current_user = wp_get_current_user(); 我不知道问题出在哪里?