06 Mayıs 2009

Kullanıcılarınızın Yetkilerini Değiştirin

WordPress Yorum Ekle

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 Manager, 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.

  1. $role = get_role('contributor');
  2. $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.

  1. //$role = get_role('contributor');
  2. //$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.

  1. $role = get_role('contributor');
  2. $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.

  1. $role = get_role('administrator');
  2. $role->add_cap('islem_yapabilir');

Aşağıdaki kodu ise sadece bu yetkiye sahip olanların işlemleri yapabilmesini sağlamak için kullanabilirsiniz.

  1. if ( current_user_can('islem_yapabilir') ) {
  2. // Yapılacak işlemler
  3. }

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.


“Kullanıcılarınızın Yetkilerini Değiştirin” yazısı için 10 Yorum

Bu yazıya yapılan yorumları dilerseniz, ( RSS 2.0 ) beslemesini kullanarak takibe alabilirsiniz.

  1. Mehmet dedi ki:

    Çok teşekkürler Yakup bey, yararlı makalelerinizin devamını bekliyoruz. iyi çalışmalar.

  2. Semih Aksu dedi ki:

    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 🙂

  3. Yakup Gövler dedi ki:

    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.

  4. Burak dedi ki:

    Hocam gerçekten çok yardımcı oldunuz teşekkürler.

  5. ugur dedi ki:

    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

  6. Yakup Gövler dedi ki:

    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.

  7. ugur dedi ki:

    Teşekkürler Yaku Bey

  8. murat dedi ki:

    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

  9. murat dedi ki:

    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

  10. Yakup Gövler dedi ki:

    @murat, yazım içerisinde geçen eklentileri inceleyip, size uygun olanı kullanınız.