web-dev-qa-db-ja.com

割り当てられていないブログのマルチサイトでのユーザーアクセスを制限する

そのネットワーク内の別のブログの管理者であるにもかかわらず、その特定のブログにユーザーとして割り当てられていない場合、そのユーザーがその特定のブログにユーザーとして割り当てられていない場合、そのロールのユーザーを制限します。 $userがログインしようとしている人のユーザー名であるget_blogs_of_user( $user );関数を使ってそれができることを私は願っています。

編集:私のコードは以下の通りです。

 $info = array();
    $info['user_login'] = $_POST['username'];
    $info['user_password'] = $_POST['password'];
    $info['remember'] = true;

 $user_signon = wp_signon($info, false);
    if (is_wp_error($user_signon)) {
        echo json_encode(array('loggedin' => false, 'message' => __('Invalid Credentials.')));
    } else {
    $get_blogs = get_blogs_of_user(get_user_by('login',$info['user_login'])->ID);
    $is_has_access = array_search(get_current_blog_id(), array_column($get_blogs, 'userblog_id'));
    if (!$is_has_access) {
         wp_logout();
        echo json_encode(array('loggedin' => false, 'message' => __('You have no permission to access.')));
    } else {
            echo json_encode(array('loggedin' => true, 'message' => __('Login successful')));
       }
    }

もっと良い方法はありますか?

1
mpsbhat

is_user_logged_in()プラガブル関数 です。つまり、機能をオーバーライドできます。おそらくそれが私が始めたところです。

このような何かはあなたが探していることをするかもしれません。これはテストされていないコードであり、いかなる保証も伴いません。

function is_user_logged_in() {
    $user = wp_get_current_user();
    $current_blog_id = get_current_blog_id();
    $allowed = false;
    $blogs_of_user = get_blogs_of_user( $user->ID );
    foreach( $blogs_of_user as $blog ) {
        if( $blog->userblog_id == $current_blog_id ) {
            $allowed = true;
        }
    }

    if( ! $allowed ) {
        return false;
    }

    return $user->exists();

}

参考文献

1
Pat J