Veysel Uğur KIZMAZ

Sharepoint Kodları Tam Yetkili Olarak Çalistirmak

26.05.2012Okunma Sayısı: 7456Kategori: Sharepoint 2010

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. Bu noktada kullanıcı yetkisi dışında tam yetkili olarak bu işlemleri çalıştırma imkanımız bulunmaktadır.

Bu işlemi SPSecurity.RunWithElevatedPrivileges metoduyla gerçekleştirmekteyiz. Bu metod, içerisinde yazılan kodları uygulamanın domain yöneticisiymiş gibi çalıştırmaktadır (Sharepoint\System). Bu sayede kullanıcının yetkileri ne kadar sınırlı olursa olsun uygulama içerisinde bu kod bloğundaki tüm işlemler gerçekleştirilmektedir.
Kodların çalışma yöntemi ise metod içerisinde oluşturulan bir delegate altında çalışması istenen işlemler yazılır:
 
SPSecurity.RunWithElevatedPrivileges(delegate()
{
    //Çalışacak Kod
});
 
Bu kod tam olarak nerede işimize yarayacak?
 
Birkaç örnek senaryo üzerinden gidelim.
 
Senaryo 1: Sisteme yeni bir liste elemanı eklediniz ya da bir elemanı düzenlediniz. Elemanı ekleme ve düzenleme sırasında elemana kodla yetki vermek istiyorsunuz fakat domain yöneticisi olmadığınız için size izin vermiyor. Bu noktada kodları RunWithElevatedPrivileges ile çalıştırırsanız yetkilendirme işlemini başarıyla gerçekleştirebilirsiniz.
 
Senaryo 2: Kullanıcının veri ekleme yetkisi olmayan bir listedeki eleman üzerinde düzenleme yapması gerekiyor. İzni olmadığı için düzenleme kodlarını RunWithElevatedPrivileges ile çalıştırmak gerekecektir.
 
ÖNEMLİ:
Bu yöntemle kod yazarken dikkat edilecek bir nokta, SPSite ve SPWeb dahil tüm nesnelerin kod içerisinde yeniden oluşturulması zorunludur. Bunun sebebi, tam yetkili çalışacak nesneler ayrı olarak oluşturulmalı ve bu yetkiye sahip olduğunu bilir şekilde ilerlemelidir. Aksi durumda (yani RunWithElevatedPrivileges dışında tanımlanan bir Sharepoint nesnesi kullanılmak istendiğinde) o nesneler yetkisiz kullanıcı tarafından kullanıldığı için hata verecektir.
 
Örnek Uygulama:
 
Örnek uygulamamızda listeye eleman ekleme yetkisi olmayan bir kullanıcının listeye bir eleman eklemesini sağlayalım. Listemizin adı: Personel. Kullanıcının bu listede sadece görme yetkisi var.
 
 
Örnek kodumuzu Application Page üzerinde gerçekleştirelim. Sayfanın adı 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 Uğur KIZMAZ";
                        yeniPersonel["IseBaslamaTarihi"] = new DateTime(2012, 01, 10);
                        yeniPersonel.Update();
                        lbMesaj.Text = "Kayıt gerçekleşti";
                    }
                }
            });
        }
 
 
Ekle butonuna tıkladığımzda işlem başarıyla tamamlanacak ve listede elemanı görebileceğiz.
 
 
 
Yepyeni makalelerde görüşmek dileğiyle :)
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com