限制未分配博客在多个站点中的用户访问

时间:2016-05-07 作者:mpsbhat

如果任何角色的用户没有被指定为某个特定博客的用户,即使他/她是该网络中另一个博客的管理员,那么限制他/她登录wordpress multisite network的博客的更好方法是什么。我希望可以使用get_blogs_of_user( $user ); 功能所在位置$user 是尝试登录的用户的用户名。

EDIT: 我的代码如下。

 $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 个回复
SO网友:Pat J

is_user_logged_in() 是一个pluggable function, 这意味着您可以覆盖其功能。这可能就是我的出发点。

像这样的东西可能会满足你的需要。这是未经测试的代码,没有任何形式的保证。

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

参考文献Pluggable Functions
  • is_user_logged_in()
  • wp_get_current_user()
  • get_current_blog_id()
  • get_blogs_of_user()