Wordpress MU – CAS Entegrasyonu
Wordpress en yaygın kullanılan web içerik yönetim aracıdır. Wordpress’in tek kurulum ile birden çok kullanıcıya hizmet veren MU (multi-user) versiyonu da vardır. Wordpress MU; Tek kurulum ile istenilen sayıda kişiye web sayfa oluşturma olanağı sağlamaktadır. Buna en güzel örnek wordpress.com dur. Wordpress.com’da şu anda 4 milyon’un üzerinde blog bulunmaktadır. Bu kullanıcıların tamamına da tek bir Wordpress MU tarafından hizmet verilmektedir.
Wordpress gibi uygulamaların yönetim panellerine (Admin Panel) giriş için kullanıcıların bir doğrulamadan geçmeleri gerekmektedir. Bu doğrulama için wordpress’in kendi içinde bir yapı bulunmaktadır. Kullanıcılara ait kullanıcı adı ve şifre gibi bilgiler wp_users tablosunda tutulmaktadır. Bazı durumlarda kullanıcı adı ve şifre doğrulaması için LDAP gibi merkezi bir yapı kullanılmak istenebilir. Böyle bir durumda wordpress’in kaynak kodlarında birtakın değişikliklerin yapılması gerekecektir.
Aşağıda Wordpress MU, kullanıcı doğrulaması için JA-SIG tarafından geliştirilen CAS entegrasyonu anlatılmıştır. Gerekli adımları sırası ile takip ederek Wordpress – CAS entegrasyonunu gerçekleştirebilirsiniz.
- Kullanıcıların sisteme CAS ile girişinin sağlanması için PHPCAS paketi kullanılacaktır. PHPCAS paketi %WP_HOME/wp-content/mu-plugins/CAS klasörü içerisine kopyalanır. PHPCAS paketinin son sürümünü http://www.ja-sig.org/wiki/display/CASC/phpCAS adresinden indirebilirsiniz.

CAS klasörünün içindeki dosyaların listesi de aşağıdaki gibidir - %WP_HOME%/wp-login.php dosyası CAS entegrasyonu için düzenlenmiştir. Dosyanın son şekli aşağıdaki gibidir.
wp-login.php dosyasını indirmek için wp-login
- %WP_HOME%/wp-content/mu-plugins/pluggable.php dosyası düzenlenmiştir. Bu dosyada, kullanıcının CAS login’inden sonra hesabı olup olmadığı kontrol ediliyor, eğer kullanıcının hesabı yoksa otomatik olarak hesap oluşturuluyor ve kullanıcıya bilgilendirme maili gönderiliyor. Eğer CAS girişi yapılmamış ise wp-login.php dosyasına yönlendirilip, kullanıcının CAS’a gitmesi zorlanıyor.
Error: The password field is empty.'); return false; } if ($current_user->data->user_login == $username) return true; $login = get_userdatabylogin($username); //$login = $wpdb->get_row("SELECT ID, user_login, user_pass FROM $wpdb->users WHERE user_login = '$username'"); if (!$login) { // Checks if user exists in WPMU require_once ('suinc_ldap.php'); $error = __('Error: Wrong username.'); $suinc_array = su_ldap_array_anonim($username); // if(in_array("academic",$suinc_array["ou"]) || in_array("admin",$suinc_array["ou"])) { if(in_array("academic",$suinc_array["ou"])) { $user_id = username_exists($username); if ( !$user_id ) { $domain = "example.com"; $path = "/".$uid; $title = html_entity_decode($cntr, ENT_QUOTES, "UTF-8"); $userEmail = $mail; $meta['public'] = 1; $random_password = substr(md5(uniqid(microtime())), 0, 6); $user_id = wpmu_create_user( $username, $random_password, $suinc_array["mail"]); $blog_id = wpmu_create_blog($domain, $path, $title, $user_id, $meta, $site_id = 1); wpmu_welcome_notification($blog_id, $user_id, $random_password, $title, $meta = ''); echo 'Siteniz Oluştu.
'; } else { $random_password = __('Kullanıcı var, şifre hatalı.'); echo "Kullanıcı zaten var."; } } else { echo "Web oluşturma içni yetkiniz yok"; } return false; } else { $primary_blog = get_usermeta( $login->ID, "primary_blog" ); if( $primary_blog ) { $details = get_blog_details( $primary_blog ); if( is_object( $details ) ) { if( $details->archived == 1 || $details->spam == 1 || $details->deleted == 1 ) { $error = __('Error: Blog suspended.'); return false; } } } } if ( $CASauth ) { return true; } else { phpCAS::forceAuthentication(); } } function get_userdata( $user_id ) { global $wpdb, $cache_userdata, $wpmuBaseTablePrefix; $user_id = (int) $user_id; if ( $user_id == 0 ) return false; $user = wp_cache_get($user_id, 'users'); $user_level = $wpmuBaseTablePrefix . $wpdb->blogid . '_user_level'; if ( $user && is_site_admin( $user->user_login ) ) { $user->$user_level = 10; $user->user_level = 10; $cap_key = $wpdb->prefix . 'capabilities'; $user->{$cap_key} = array( 'administrator' => '1' ); return $user; } elseif ( $user ) { return $user; } if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE ID = '$user_id'") ) return false; $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user_id' /* pluggable get_userdata */"); if ($metavalues) { foreach ( $metavalues as $meta ) { @ $value = unserialize($meta->meta_value); if ($value === FALSE) $value = $meta->meta_value; $user->{$meta->meta_key} = $value; // We need to set user_level from meta, not row if ( $wpdb->prefix . 'user_level' == $meta->meta_key ) $user->user_level = $meta->meta_value; } // end foreach } //end if if( is_site_admin( $user->user_login ) == true ) { $user->user_level = 10; $cap_key = $wpdb->prefix . 'capabilities'; $user->{$cap_key} = array( 'administrator' => '1' ); } wp_cache_add($user_id, $user, 'users'); wp_cache_add($user->user_login, $user, 'userlogins'); return $user; } function get_userdatabylogin($user_login) { global $wpdb; $user_login = sanitize_user( $user_login ); if ( empty( $user_login ) ) return false; $userdata = wp_cache_get($user_login, 'userlogins'); if( $userdata && is_site_admin( $user_login ) == true ) { $userdata->user_level = 10; $cap_key = $wpdb->prefix . 'capabilities'; $userdata->{$cap_key} = array( 'administrator' => '1' ); return $userdata; } elseif( $userdata ) return $userdata; if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$user_login'") ) return false; $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user->ID'"); if ($metavalues) { foreach ( $metavalues as $meta ) { @ $value = unserialize($meta->meta_value); if ($value === FALSE) $value = $meta->meta_value; $user->{$meta->meta_key} = $value; // We need to set user_level from meta, not row if ( $wpdb->prefix . 'user_level' == $meta->meta_key ) $user->user_level = $meta->meta_value; } } if( is_site_admin( $user_login ) == true ) { $user->user_level = 10; $cap_key = $wpdb->prefix . 'capabilities'; $user->{$cap_key} = array( 'administrator' => '1' ); } wp_cache_add($user->ID, $user, 'users'); wp_cache_add($user->user_login, $user, 'userlogins'); return $user; } ?>pluggable.php dosyasını indirmek için tıklayınız.
CAS Entegrasyonu hakkında daha fazla bilgi almak için http://www.andrejciho.com/wordpress-mu/wpmu-cas-integration/ adresini ziyaret ediniz.


Yeni yorum ekle