WordPress çok harika bir sistem. En sevdiğim özelliklerinden birisi de site üyelerinin sadece kendilerine verilen yetkilere göre işlem yapabilmeleri. Biliyorsunuz WP bunun için üyelere çeşitli roller verme imkanı tanıyor bize ve bu yetkilere göre üyeleri sınırlıyor. Örneğin bazı üyelerinizin yazı yazmasını istiyorsanız, onlara 'İçerik Sağlayıcı' rolü vermeniz yeterli. Ancak bazen verdiğiniz role ait yetkiler yeterli olmayabilir. Bununla ilgili birkaç kez soru sorulmuştu.
İçerik sağlayıcılar yazı yazabilmekteler ancak resim ya da benzeri yüklemeleri yapamamaktalar. Peki bu problemi nasıl çözeceğiz, içerik sağlayıcılara nasıl dosya yükleme yetkisi vereceğiz?
Öncelikle WP Codex'teki Roles and Capabilities yazısını okuyarak, kimin hangi yetkilere sahip olduğunu öğrenmelisiniz. Yazı sonundaki harici kaynaklara bakarsanız yetkilendirme işlemlerini kolaylaştırmak için , Role Scoper ve Adminimize Plugin eklentilerinin kullanılabileceğini görebilirsiniz. Ancak yapmak istediğiniz küçük yetkiler vermekse, böylesine büyük eklentileri kullanmak bence gereksiz.
İçerik Sağlayıcılara Resim/Dosya Ekleme Yetkisi
Aşağıdaki kodu temanızın Tema fonksiyonları (functions.php) dosyasına uygun şekilde ekleyerek içerik sağlayıcılarınıza resim/dosya ekleme yetkisi verebilirsiniz. Kodu eklediğinizde içerik sağlayıcılarınız için yazı editöründe resim ekleme düğmeleri görünmeye başlayacak. Ayrıca yönetim panelinde Medya menüsü görünmeye başlayacak. İçerik sağlayıcılar siteye eklenmiş olan bütün resimleri görebilecekler ancak onları silme, değiştirme gibi yetkileri olmayacak. WP 2.7.1 sürümüyle yaptığım denemelerde olumlu sonuçlar aldım. Sitenizde deneme yapmadan ya da içerik sağlayıcılarınıza güvenmiyorsanız kullanmayın.
- $role = get_role('contributor');
- $role->add_cap('upload_files');
Yaptığınız değişiklikleri kaydettikten sonra sitenizin yönetim paneline girip bu kodların en az birkez çalışmasını sağlamalısınız. Ardında da kodları aşağıdaki gibi yapıp, geçersiz hale getirmelisiniz. Çünkü birkez add_cap fonksiyonunu kullandıktan sonra tekrar kullanmaya gerek kalmıyor. Boşuna sorgu yapmamak için kodları çalışmaz hale getiriyoruz.
- //$role = get_role('contributor');
- //$role->add_cap('upload_files');
Peki yetkiyi geri almak için ne yapmalıyız? Yapmanız gereken yine temanızın Tema fonksiyonları (functions.php) dosyasına eklemeniz ve yine en az birkez çalışmasını sağlamalısınız. Ardından yine kodların başına // koyarak geçersiz yapabilirsiniz.
- $role = get_role('contributor');
- $role->remove_cap('upload_files');
Başka role sahip olanlara yetki vermek için get_role içerisindeki 'contributor' ifadesi yerine 'administrator' (yönetici), 'editor' (editör), 'author' (yazar), 'subscriber' (abone) yazmanız ve ardından add_role içerisine vermek istediğiniz yetkiyi Roles and Capabilities yazısında bulup, ismini yazmanız yeterli.
Eklentilerde add_cap, remove_cap Fonksiyonlarını Kullanma
Aslında yukarıdakileri bir eklenti haline getirip, kullanmak çok daha esneklik sağlayacaktır. Bunun dışında diyelim ki büyük bir eklenti yazıyorsunuz ve bu eklentide bazı işlemler için yetkilendirme yapmak istiyorsunuz. Bu durumda eklentiniz içerisinde öncelikle işlemi yapabilecek olanlara özel bir yetki verirsiniz, bunu eklenti etkinleştirildiğinde yapmanızı tavsiye ederim. Ardından işlemi gerçekleştirmeden önce bu yetkinin o kullanıcıda olup olmadığını kontrol edersiniz. Yapacağınız işlemleri şu şekilde gerçekleştirebilirsiniz.
Aşağıdaki kodu eklentinizin etkinleştirme fonksiyonu içerisine ekleyerek İçerik sağlayıcılarına istediğiniz bir yetkiyi vermiş olursunuz. Kod ile yöneticilere 'islem_yapabilir' adlı yetkiyi vermiş olursunuz.
- $role = get_role('administrator');
- $role->add_cap('islem_yapabilir');
Aşağıdaki kodu ise sadece bu yetkiye sahip olanların işlemleri yapabilmesini sağlamak için kullanabilirsiniz.
- if ( current_user_can('islem_yapabilir') ) {
- // Yapılacak işlemler
- }
current_user_can giriş yapmış olan kullanıcının belirtilen yetkiye sahip olup, olmadığını kontrol eder. Farklı rollere farklı yetkiler vererek eklentinizi daha etkin hale getirebilirsiniz. Gerisi sizin yeteneğinize kalmış.
Kaynak1, Kaynak2
Bu yazının kısa bağlantısı http://www.yakupgovler.com/?p=794.
Yazılarımı RSS aboneliği ile takip edebilir, yeni yazılarıma kolaylıkla ulaşabilirsiniz. Bunun için ise RSS adresimi kullanabilirsiniz.
Tarih: 06 Mayıs 2009 Saat: 20:44
Çok teşekkürler Yakup bey, yararlı makalelerinizin devamını bekliyoruz. iyi çalışmalar.
Tarih: 07 Mayıs 2009 Saat: 00:24
Ben o istek için, dün schema.php dosyasını inceledim dediğiniz gibi, add_cap fonksiyonları orada da vardı... Oraya ekledim işlemedi 🙂
functions.php de denemedim, keşke deneseymişim 🙂
Tarih: 07 Mayıs 2009 Saat: 03:55
schema.php ekledikten sonra bu dosyanın da en az bir kez çalıştırılması gerekiyor. Bu dosya da ilk kurulum esnasında çalıştırıldığından, bu dosya üzerinde değişiklik yapmanın bir faydası olmayacaktır. Yazımda verdiğim eklentilerden biri bu konuda güzel işler yapabilir. Bir sayfada bütün yetkileri ve rolleri sıralıyor. Checkbox'ları kullanarak istediğiniz yetkiyi, istediğinize verebiliyor ya da ondan alabiliyorsunuz. O tarz basit bir eklenti ile işler kolaylaştırılabilir.
Tarih: 07 Mayıs 2009 Saat: 08:39
Hocam gerçekten çok yardımcı oldunuz teşekkürler.
Tarih: 03 Haziran 2009 Saat: 15:22
Yakup Bey teşekkürler faydalı bir bilgi olmuş.
peki bizler çeşitli eklentiler kullnıyoruz tablo eklentisi gibi örneğin.peki yazar olarak atadığımız kişilere bu tablo eklentisini kullanma iznini nasıl verebiliriz acab.yada istediğimiz eklentileri kullanma iznini.tüm eklentileri değil.teşekkürler
Tarih: 05 Haziran 2009 Saat: 08:00
Ne yazık ki bunun için izin vermek istediğiniz eklentileri düzenlemelisiniz. Çünkü eklentilerin çoğu level'i 10 olan yöneticiler için eklenti içerisinde yetkilendirilir. Şöyle ki eğer bir eklentinin yönetim panelinde menüsü varsa bu menü çeşitli fonksiyonlarla oraya eklenirler örneğin wp-vote eklentisinin menüsü aşağıdaki gibi bir fonksiyon ile Ayarlar sayfasına eklenir.
add_options_page("Options Vote", "Options Vote", 8, basename(__FILE__), "smpligg_displayOptions");
Kod içerisinde geçen 8 rakamı eklenen menü seçeneğini görecek olan kullanıcının level'ini, yetkisini ifade eder. Buradan hangi kullanıcı rolünün hangi yetkilere sahip olduğunu öğrenebilirsiniz. Ona göre 8 rakamını düşürerek örneğin 1 yaparak içerik sağlayıcıların o eklentiyi kullanmasını sağlayabilirsiniz. Şimdilik bundan başka bir çözüm aklıma gelmiyor.
Tarih: 05 Haziran 2009 Saat: 20:15
Teşekkürler Yaku Bey
Tarih: 08 Eylül 2009 Saat: 21:51
peki yakup bey;
sadece admine yazma ve kategori açma yetkisini vermek istiyorum diğer kullanıcılara admin panel her hangi bir yetki vermek istemiyorum bunun için kısayol nedir
Tarih: 08 Eylül 2009 Saat: 21:54
yani hocam ben sadece admine aşağıdaki yetkileri vermek istiyorum kısayoldan nasıl yapabiliriz lütfen yardımcı olun
edit_dashboard
manage_categories
delete_others_posts
delete_private_posts
edit_private_posts
read_private_posts upload_files
publish_posts
delete_published_posts
edit_posts
delete_posts
read
Tarih: 09 Eylül 2009 Saat: 08:26
@murat, yazım içerisinde geçen eklentileri inceleyip, size uygun olanı kullanınız.