Makale Özeti

Sharepoint ile oluşturulan uygulamalarda kullanıcıların yetkilerini yapacakları işlere göre sınırlandırmaktayız. Fakat bazı işlemler, kullanıcıların yetkilerini aşmaktadır.

Makale

Sharepoint ile olusturulan uygulamalarda kullanicilarin yetkilerini yapacaklari islere göre sinirlandirmaktayiz. Fakat bazi islemler, kullanicilarin yetkilerini asmaktadir. Bu noktada kullanici yetkisi disinda tam yetkili olarak bu islemleri çalistirma imkanimiz bulunmaktadir.

Bu islemi SPSecurity.RunWithElevatedPrivileges metoduyla gerçeklestirmekteyiz. Bu metod, içerisinde yazilan kodlari uygulamanin domain yöneticisiymis gibi çalistirmaktadir (Sharepoint\System). Bu sayede kullanicinin yetkileri ne kadar sinirli olursa olsun uygulama içerisinde bu kod blogundaki tüm islemler gerçeklestirilmektedir.
Kodlarin çalisma yöntemi ise metod içerisinde olusturulan bir delegate altinda çalismasi istenen islemler yazilir:
 
SPSecurity.RunWithElevatedPrivileges(delegate()
{
    //Çalisacak Kod
});
 
Bu kod tam olarak nerede isimize yarayacak?
 
Birkaç örnek senaryo üzerinden gidelim.
 
Senaryo 1: Sisteme yeni bir liste elemani eklediniz ya da bir elemani düzenlediniz. Elemani ekleme ve düzenleme sirasinda elemana kodla yetki vermek istiyorsunuz fakat domain yöneticisi olmadiginiz için size izin vermiyor. Bu noktada kodlari RunWithElevatedPrivileges ile çalistirirsaniz yetkilendirme islemini basariyla gerçeklestirebilirsiniz.
 
Senaryo 2: Kullanicinin veri ekleme yetkisi olmayan bir listedeki eleman üzerinde düzenleme yapmasi gerekiyor. Izni olmadigi için düzenleme kodlarini RunWithElevatedPrivileges ile çalistirmak gerekecektir.
 
ÖNEMLI:
Bu yöntemle kod yazarken dikkat edilecek bir nokta, SPSite ve SPWeb dahil tüm nesnelerin kod içerisinde yeniden olusturulmasi zorunludur. Bunun sebebi, tam yetkili çalisacak nesneler ayri olarak olusturulmali ve bu yetkiye sahip oldugunu bilir sekilde ilerlemelidir. Aksi durumda (yani RunWithElevatedPrivileges disinda tanimlanan bir Sharepoint nesnesi kullanilmak istendiginde) o nesneler yetkisiz kullanici tarafindan kullanildigi için hata verecektir.
 
Örnek Uygulama:
 
Örnek uygulamamizda listeye eleman ekleme yetkisi olmayan bir kullanicinin listeye bir eleman eklemesini saglayalim. Listemizin adi: Personel. Kullanicinin bu listede sadece görme yetkisi var.
 
 
Örnek kodumuzu Application Page üzerinde gerçeklestirelim. Sayfanin adi YeniElemanEkle.aspx olsun.
 
YeniElemanEkle.aspx
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <asp:Button ID="btEkle" runat="server" Text="Ekle" OnClick="btEkle_Click" />
    <br />
    <asp:Label ID="lbMesaj" runat="server" Text=""></asp:Label>
</asp:Content>
 
YeniElemanEkle.aspx.cs
protected void btEkle_Click(object sender, EventArgs e)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(SPContext.Current.Site.Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        web.AllowUnsafeUpdates = true;
 
                        SPList listePersonel = web.Lists["Personel"];
                        SPListItem yeniPersonel = listePersonel.AddItem();
                        yeniPersonel["Title"] = "Veysel Ugur KIZMAZ";
                        yeniPersonel["IseBaslamaTarihi"] = new DateTime(2012, 01, 10);
                        yeniPersonel.Update();
                        lbMesaj.Text = "Kayit gerçeklesti";
                    }
                }
            });
        }
 
 
Ekle butonuna tikladigimzda islem basariyla tamamlanacak ve listede elemani görebilecegiz.
 
 
 
Yepyeni makalelerde görüsmek dilegiyle :)
 
Veysel Ugur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com