禁用用户角色的REST API

时间:2020-05-13 作者:Samuel

我正在寻找一种方法来禁用名为“external\\u user”(禁用wp json查询)的用户角色的Rest API

当我们将wp json放在URL(用户、页面、帖子…)上时,这个用户角色现在可以看到大量的帖子和页面信息

我实际上使用插件DISABLE REST API 但它只会阻止未登录的用户查看json信息。我需要做同样的事情external_user 角色

如果不可能,我可以重定向此用户角色吗(and only external_user role) 如果他想把URL和wp json放在一起,会有404页?

谢谢

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

插件有一个过滤器drh_allow_rest_api 它确定当前用户是否具有完全访问权限,并且可以跳过白名单检查。默认情况下,这只是is_user_logged_in():

/**
 * Allow carte blanche access for logged-in users (or allow override via filter)
 *
 * @return bool
 */
private function allow_rest_api() {
    return (bool) apply_filters( \'dra_allow_rest_api\', is_user_logged_in() );
}
因此,如果是外部用户,我们可以挂接它以清除“is\\u user\\u logged\\u in”标志:

function dra_disallow_external_users( $logged_in ) {
    if ( $logged_in ) {
        $user = wp_get_current_user();
        if ( $user && in_array( \'external_user\', $user->roles ) ) {
            // Treat external_users as unauthenticated
            // i.e. only allow access to whitelisted endpoints.
            return false;
        }
    }

    return $logged_in;
}
add_filter( \'dra_allow_rest_api\', \'dra_disallow_external_users\', 10, 1 );

SO网友:Sabbir Hasan

如果你想在没有插件的情况下完成它,你可以采用这种方法。这将检查两件事。

用户是否登录

  • 如果登录用户是否为“external\\u user”
  • add_filter( \'rest_authentication_errors\', \'wp_snippet_disable_rest_api\' );
    function wp_snippet_disable_rest_api( $access ) {
        if(!is_user_logged_in() || (is_user_logged_in() && current_user_can(\'external_user\'))){
            return new WP_Error( \'rest_disabled\', __(\'The WordPress REST API has been disabled.\'), array( \'status\' => rest_authorization_required_code()));
        }
    }