web-dev-qa-db-fra.com

Restreindre the access of users sur plusieurs sites

Quel est le meilleur moyen de restreindre un utilisateur de tout rôle se connectant à un blog de réseau multisite wordpress s'il/elle n'est pas affecté à ce blog particulier en tant qu'utilisateur, même s'il est administrateur d'un autre blog de ce réseau? J'espère que cela peut être fait en utilisant la fonction get_blogs_of_user( $user );$user est le nom d'utilisateur de la personne qui tente de se connecter.

EDIT: Mon code comme suit.

 $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')));
       }
    }

Y a-t-il de meilleurs moyens?

1
mpsbhat

is_user_logged_in() est une fonction connectable , ce qui signifie que vous pouvez en remplacer la fonctionnalité. C'est probablement par où je commencerais.

Quelque chose comme ça peut faire ce que vous cherchez. Ce code n’a pas été testé et n’est assorti d'aucune garantie.

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();

}

Références

1
Pat J