自定义POST类型功能-需要非常安全

时间:2012-11-20 作者:Ben

您好,我正在尝试为intranet站点上的员工合同定义自定义帖子类型功能,因此由于信息的敏感性,这需要有尽可能好的安全性,仅仅通过jQuery或css隐藏菜单链接是不够的。

下面是我目前如何定义帖子类型的:

function user_contract_post_type(){
    register_post_type(
    \'Contract\',
    array(
        \'labels\' => array(
        \'name\' => __(\'Contracts\', \'intranet\'),
        \'singular_name\' => __(\'Contract\', \'intranet\')
        ),
        \'public\' => true,
        \'publicly_queryable\' => true,
        \'exclude_from_search\' => true,
        \'show_ui\' => true,
        \'menu_position\' => 71,
        \'query_var\' => true,
        \'has_archive\' => false,
        \'rewrite\'   => array(
        \'slug\' => \'contracts\',
        \'with_front\' => false,
        \'feeds\' => false
        ),
        \'hierarchical\' => false,
        \'supports\' => array(
        \'title\',
        \'editor\',
        \'page-attributes\'
        ),
        \'capability_type\' => \'contract\',
        \'capabilities\' => array(
        \'edit_contract\',
        \'read_contract\',
        \'delete_contract\',
        \'publish_contract\',
        \'edit_contracts\',
        \'delete_contracts\',
        \'delete_published_contracts\',
        \'edit_published_contracts\'
        ),
        \'map_meta_cap\' => true,
        \'can_export\' => true
    )
    );
}
add_action(\'init\', \'user_contract_post_type\');
这允许我编辑合同,因为我可以在管理主菜单和合同编辑屏幕中看到合同链接,而其他用户不能,但我不能做任何其他事情。我所能做的就是阅读并更新已经发布的合同,预览并提交新合同供审查。

任何帮助都是很乐意的。谢谢

1 个回复
SO网友:Tyler Carter

您可能需要研究映射meta caps. 这将使您拥有一个功能,在WordPress决定是否允许访问某些功能之前,您可以单独使用该功能。

这样,您就可以检查用户级别(比如管理员),并且只有当用户达到该级别时,才授予其读取和编辑合同的权限。您甚至可以进一步检查是否是管理员,还可以检查用户是否具有特定ID(或一组ID)。

add_action( \'map_meta_cap\', \'my_meta_cap\', 10, 4 );
function my_meta_cap( $caps, $cap, $user_id, $args ){

    if( current_user_can( \'administrator\' ) ){
        return array( \'edit_contract\' );
    }

    return array();

}
您还可以做一些很酷的事情,比如在授予访问权限之前检查合同的作者等等。您可以制定一个自定义规则,即您编写的合同不能由其他任何人编辑,但您可以编辑其他任何人的合同。

有一些有趣的参考资料可以了解有关此粒度控件的更多信息。我在搜索你的问题时(在谷歌上)发现了这些问题:

结束

相关推荐

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(); 我不知道问题出在哪里?