WP CLI ile Kullanıcı Rolü Oluşturma ve Düzenleme
WordPress sitenizde kullanıcı yönetimi söz konusu olduğunda, varsayılan roller çoğu zaman yeterli gelmiyor. Bir e-ticaret sitesinde sadece sipariş görebilen ama ürün düzenleyemeyen bir muhasebeci rolü, ya da içerik üretebilen ama yayınlayamayan bir editör yardımcısı rolü oluşturmanız gerektiğinde, WordPress admin paneli üzerinden bu işleri yapmak hem yavaş hem de hataya açık. İşte tam bu noktada WP-CLI devreye giriyor ve wp role komutu hayat kurtarıyor.
wp role Komutuna Genel Bakış
wp role komutu, WordPress kullanıcı rollerini komut satırından yönetmenizi sağlar. Rol oluşturma, silme, listeleme ve sıfırlama gibi temel işlemlerin yanı sıra, wp cap komutuyla birlikte kullanıldığında rollere özel yetkiler (capabilities) atayabilir ya da mevcut yetkileri kaldırabilirsiniz.
Bu komut özellikle şu senaryolarda işe yarar:
- Çok siteli (multisite) WordPress kurulumlarında toplu rol yönetimi
- Deployment scriptlerinde otomatik rol oluşturma
- Staging ve production ortamları arasında rol senkronizasyonu
- Güvenlik açısından minimum yetki prensibini uygulamak
Önce temel sözdizimini görelim:
wp role <komut> [seçenekler]
Alt komutlar şunlardır:
- create: Yeni rol oluşturur
- delete: Mevcut rolü siler
- exists: Bir rolün var olup olmadığını kontrol eder
- list: Tüm rolleri listeler
- reset: Rolleri varsayılan WordPress değerlerine sıfırlar
Mevcut Rolleri Listeleme
Herhangi bir şey yapmadan önce mevcut durumu görmek iyi bir alışkanlık. wp role list komutu size sitenizdeki tüm rolleri getirir.
wp role list
Çıktı şöyle görünür:
+---------------+---------------+
| name | role |
+---------------+---------------+
| administrator | Administrator |
| editor | Editor |
| author | Author |
| contributor | Contributor |
| subscriber | Subscriber |
+---------------+---------------+
Eğer sadece rol slug’larını almak istiyorsanız, bunu bir script içinde kullanmak için oldukça pratiktir:
wp role list --field=role
WooCommerce kurulu bir sitede customer ve shop_manager rollerinin de listede göründüğünü fark edeceksiniz. Bu, eklentilerin kendi rollerini nasıl eklediğini anlamak açısından güzel bir örnek.
Yeni Rol Oluşturma
Temel Rol Oluşturma
Yeni bir rol oluşturmak için wp role create komutunu kullanıyoruz. Komut iki zorunlu parametre alır:
- role-key: Rol için benzersiz slug (örneğin
content_editor) - role-name: Kullanıcı arayüzünde görünen isim (örneğin “İçerik Editörü”)
wp role create content_editor "İçerik Editörü"
Bu komut boş bir rol oluşturur, yani hiçbir yetkisi yoktur. Şimdi bu role yetkiler eklememiz gerekiyor.
Mevcut Bir Rolü Kopyalayarak Yeni Rol Oluşturma
Gerçek dünyada sıklıkla karşılaştığım senaryo şu: Müşteri, editör rolünün neredeyse tüm yetkilerini taşıyan ama bazı kısıtlamalar olan yeni bir rol istiyor. Her yetkiyi tek tek eklemek yerine mevcut bir rolü başlangıç noktası olarak kullanabilirsiniz.
WP-CLI’da doğrudan “kopyala” komutu olmasa da bunu şöyle yapabilirsiniz:
# Önce editör rolünün yetkilerini görelim
wp cap list editor
# Yeni rolü oluştur
wp role create limited_editor "Kısıtlı Editör"
# Editörün tüm yetkilerini yeni role kopyala
wp cap list editor | xargs wp cap add limited_editor
Bu yaklaşım, ileride bahsedeceğimiz wp cap komutunun ne kadar güçlü olduğunu da gösteriyor.
wp cap ile Yetki Yönetimi
Roller tek başına anlam ifade etmiyor; asıl güç, rollere atanan yetkilerden geliyor. wp cap komutu bu yetkiler üzerinde tam kontrol sağlar.
Mevcut Yetkileri Listeleme
wp cap list editor
Bu komut, editör rolünün sahip olduğu tüm yetkileri listeler. Çıktıda moderate_comments, manage_categories, publish_posts gibi onlarca yetki göreceksiniz.
Role Yetki Ekleme
# Tek yetki ekleme
wp cap add content_editor publish_posts
# Birden fazla yetki ekleme
wp cap add content_editor edit_posts edit_pages upload_files
Rolden Yetki Kaldırma
wp cap remove content_editor delete_published_posts
Gerçek Dünya Senaryoları
Senaryo 1: WooCommerce Muhasebe Rolü
Bir e-ticaret projesinde müşteri şunu istedi: Muhasebe departmanı siparişleri görebilmeli, raporlara erişebilmeli ama ürünleri düzenleyememeli, sipariş durumunu değiştiremememeli.
# Muhasebe rolünü oluştur
wp role create wc_accountant "WooCommerce Muhasebeci"
# Temel WordPress yetkileri
wp cap add wc_accountant read
# WooCommerce sipariş görüntüleme yetkileri
wp cap add wc_accountant view_woocommerce_reports
wp cap add wc_accountant list_users
# Siparişleri okuyabilsin ama düzenlemesin
wp cap add wc_accountant edit_shop_orders
wp cap add wc_accountant read_shop_orders
# Yönetim paneline erişim
wp cap add wc_accountant manage_woocommerce
Ancak dikkat edin: manage_woocommerce yetkisi oldukça geniş kapsamlı. Daha kısıtlı bir yaklaşım için sadece raporlama yetkilerini vermek daha güvenli:
# Daha kısıtlı yaklaşım
wp cap remove wc_accountant manage_woocommerce
wp cap add wc_accountant view_woocommerce_reports
Senaryo 2: SEO İçerik Yazarı Rolü
Ajans projelerinde sık karşılaşılan durum: Dışarıdan çalışan SEO yazarları yazı oluşturup düzenleyebilmeli, görsel yükleyebilmeli ama yayınlama yetkisi olmamalı. Editörlerden biri onayladıktan sonra yayınlanmalı.
# SEO yazar rolünü oluştur
wp role create seo_author "SEO İçerik Yazarı"
# Temel okuma ve profil yetkileri
wp cap add seo_author read
# Yazı yönetimi (sadece kendi yazıları)
wp cap add seo_author edit_posts
wp cap add seo_author delete_posts
# Görsel ve dosya yükleme
wp cap add seo_author upload_files
# Kategori ve etiket görüntüleme (ekleme değil)
wp cap add seo_author manage_categories
# Yorum yönetimi (sadece kendi yazılarındaki)
wp cap add seo_author edit_published_posts
Burada önemli nokta: publish_posts yetkisi eklenmediği için bu kullanıcılar yazılarını sadece “İnceleme Bekleniyor” statüsüne taşıyabilir.
Senaryo 3: Franchise Ağı için Şube Yöneticisi Rolü
Çok şubeli bir işletmenin WordPress sitesinde her şube kendi sayfalarını yönetebilmeli ama başka şubelerin içeriklerine dokunamadı. Bu senaryo daha karmaşık ama WP-CLI ile başlangıç yapısını hızlıca kurabiliyoruz:
# Şube yöneticisi rolü oluştur
wp role create branch_manager "Şube Yöneticisi"
# Sayfa yönetimi yetkileri
wp cap add branch_manager read
wp cap add branch_manager edit_pages
wp cap add branch_manager edit_published_pages
wp cap add branch_manager publish_pages
wp cap add branch_manager upload_files
# Menü yönetimi
wp cap add branch_manager edit_theme_options
# Galeri ve medya yönetimi
wp cap add branch_manager manage_media
Not: Farklı şubelerin sadece kendi içeriklerini görmesi için ek bir eklenti (örneğin User Role Editor veya Members) gerekebilir. WP-CLI bu eklentilerin ayarlarını da CLI üzerinden yapılandırmanıza olanak tanır.
Rollerin Var Olup Olmadığını Kontrol Etme
Deployment scriptlerinde en sık yaptığım hatalardan biri, zaten var olan bir rolü yeniden oluşturmaya çalışmaktı. wp role exists komutu bu sorunu çözer:
wp role exists content_editor
echo $?
# 0 döndürürse rol var, 1 döndürürse yok
Bunu bir bash scripti içinde şöyle kullanabilirsiniz:
#!/bin/bash
ROLE_KEY="content_editor"
ROLE_NAME="İçerik Editörü"
if wp role exists $ROLE_KEY; then
echo "Rol zaten mevcut: $ROLE_KEY"
else
echo "Rol oluşturuluyor: $ROLE_KEY"
wp role create $ROLE_KEY "$ROLE_NAME"
wp cap add $ROLE_KEY read edit_posts upload_files publish_posts
echo "Rol başarıyla oluşturuldu ve yetkiler atandı."
fi
Bu yaklaşım özellikle CI/CD pipeline’larında ve tekrar tekrar çalıştırılabilen idempotent scriptler yazarken çok değerli.
Rolleri Sıfırlama
WordPress güncellemeleri bazen rol yapılarında beklenmedik değişikliklere yol açabilir. Ya da test amaçlı bir şeyler denedikten sonra varsayılan duruma dönmek isteyebilirsiniz. wp role reset komutu tam da bunun için:
# Tek bir rolü sıfırla
wp role reset editor
# Birden fazla rolü sıfırla
wp role reset author contributor
# Tüm standart rolleri sıfırla
wp role reset --all
Önemli uyarı: --all parametresi sadece WordPress’in standart rollerini sıfırlar, WooCommerce veya diğer eklentiler tarafından oluşturulan rolleri etkilemez. Özel oluşturduğunuz roller de bu komuttan etkilenmez.
Rolleri Silme
Artık kullanılmayan bir rolü kaldırmak için wp role delete kullanırız:
wp role delete content_editor
Ancak bu komutu çalıştırmadan önce önemli bir kontrol yapın: Bu role atanmış kullanıcılar var mı?
# Bu roldeki kullanıcıları listele
wp user list --role=content_editor --fields=ID,user_login,display_name
# Eğer kullanıcılar varsa, önce onları başka bir role taşı
wp user set-role $(wp user list --role=content_editor --field=ID) subscriber
# Sonra rolü sil
wp role delete content_editor
Bu adımları atlamanız durumunda, o roldeki kullanıcılar rol ataması olmayan “yetim” hesaplara dönüşür ve WordPress panelinde görünmezlik sorunları yaşanabilir.
Toplu Rol Yönetimi için Script Örneği
Büyük projelerde veya multisite kurulumlarında rolleri kodla yönetmek, el ile yapmaktan çok daha güvenilir. İşte production ortamımda kullandığım tipik bir yapı:
#!/bin/bash
# WordPress kurulum dizini
WP_PATH="/var/www/html"
# Fonksiyon: Rol oluştur ve yetkileri ata
create_role_if_not_exists() {
local role_key=$1
local role_name=$2
shift 2
local capabilities=("$@")
if wp --path=$WP_PATH role exists $role_key; then
echo "[SKIP] Rol mevcut: $role_key"
return 0
fi
wp --path=$WP_PATH role create $role_key "$role_name"
for cap in "${capabilities[@]}"; do
wp --path=$WP_PATH cap add $role_key $cap
done
echo "[OK] Rol oluşturuldu: $role_key - $(echo ${#capabilities[@]}) yetki atandı"
}
# SEO Yazar rolü
SEO_CAPS=("read" "edit_posts" "delete_posts" "upload_files" "edit_published_posts")
create_role_if_not_exists "seo_author" "SEO Yazarı" "${SEO_CAPS[@]}"
# İçerik Editörü rolü
EDITOR_CAPS=("read" "edit_posts" "publish_posts" "edit_pages" "publish_pages" "upload_files" "manage_categories" "moderate_comments")
create_role_if_not_exists "content_editor" "İçerik Editörü" "${EDITOR_CAPS[@]}"
# WC Muhasebeci rolü
ACCOUNTANT_CAPS=("read" "view_woocommerce_reports" "edit_shop_orders" "read_shop_orders")
create_role_if_not_exists "wc_accountant" "Muhasebeci" "${ACCOUNTANT_CAPS[@]}"
echo "Tüm roller kontrol edildi."
Bu scripti deployment sürecinize ekleyerek her ortamda tutarlı bir rol yapısı elde edersiniz.
Multisite Kurulumlarında Rol Yönetimi
WordPress multisite kullanıyorsanız, --url parametresiyle belirli bir alt siteyi hedef alabilirsiniz:
# Belirli bir alt sitede rol oluştur
wp role create content_editor "İçerik Editörü" --url=site2.domain.com
# Network genelinde süper admin olmayan roller sadece o siteye özeldir
wp cap list editor --url=shop.domain.com
Multisite’da dikkat edilmesi gereken nokta: Roller her site için ayrı ayrı yönetilir. Bir alt sitede oluşturduğunuz özel rol, diğer alt sitelerde otomatik olarak görünmez.
Güvenlik Önerileri
WP-CLI ile rol yönetimi yaparken göz önünde bulundurmanız gereken birkaç kritik nokta var:
- Minimum yetki prensibi: Kullanıcıya sadece işini yapabilmesi için gereken minimum yetkileri verin.
edit_theme_optionsgibi geniş kapsamlı yetkileri vermekten kaçının. administratorrolünü kopyalamayın: Yeni bir rol oluştururken başlangıç noktası olarak administrator almak ve sonra bazı şeyleri çıkarmak yerine, sıfırdan başlayıp gerekli yetkileri tek tek ekleyin.- Periyodik denetim yapın:
wp cap listçıktısını düzenli olarak gözden geçirin. Eklenti güncellemeleri bazen rollere beklenmedik yetkiler ekleyebilir. - Değişiklikleri version control’a alın: Rol oluşturma scriptlerinizi Git’e ekleyin. Böylece kim ne zaman ne değiştirdi takip edebilirsiniz.
# Tüm rollerin yetkilerini bir dosyaya kaydet (audit için)
for role in $(wp role list --field=role); do
echo "=== $role ===" >> roles_audit.txt
wp cap list $role >> roles_audit.txt
echo "" >> roles_audit.txt
done
Rol Değişikliklerini Test Etme
Yeni bir rol oluşturduktan veya mevcut bir rolü değiştirdikten sonra, test etmek için geçici bir kullanıcı oluşturmak iyi bir pratik:
# Test kullanıcısı oluştur
wp user create test_editor [email protected] --role=content_editor --user_pass=TestPass123!
# Kullanıcının yetkilerini doğrula
wp user list --login=test_editor
# Test tamamlandıktan sonra kullanıcıyı sil
wp user delete test_editor --yes
Bu yaklaşım, rol değişikliklerinin etkisini gerçek kullanıcıları etkilemeden önce doğrulamanıza olanak tanır.
Sonuç
wp role ve wp cap komutları, WordPress kullanıcı yönetimini bambaşka bir seviyeye taşıyor. Admin panelinden tek tek tıklamak yerine, bir kez yazıp defalarca kullanabileceğiniz scriptler oluşturabiliyorsunuz. Deployment süreçlerinize entegre ettiğinizde, staging’den production’a geçişlerde “ah bu rolü kurmayı unuttum” derdiniz ortadan kalkıyor.
Özellikle WooCommerce projelerinde özel roller hayat kurtarıyor. Muhasebeci siparişlere bakabilmeli ama fiyatları değiştirememeli, stok sorumlusu ürün güncelleyebilmeli ama ödeme ayarlarına erişememeli… Bunların hepsini birkaç satır komutla çözebilmek, WordPress’i gerçek anlamda enterprise düzeyde bir platform haline getiriyor.
Son olarak şunu hatırlatmak isterim: Rol değişikliklerini production’a almadan önce mutlaka staging ortamında test edin ve değişiklikleri her zaman bir script dosyasında dokumentasyonlu şekilde tutun. Yarın başka bir sysadmin (ya da altı ay sonraki siz) o scriptlere bakarak ne yapıldığını anlayabilmeli.
