SPSecurity.RunWithElevatedPrivileges'ı Doğru Kullanmak

SharePoint üzerine yazılım geliştirirken bazen geçici olarak kullanıcıya sahip olduğundan daha fazla bir yetki ile bir kod bloğunu çalıştırma izni vermeniz gerekebilir. Bu özellikle anonymous erişime açtığınız sayfalardan veri alış-verişi esnasında sıkça yapılan bir olaydır. Örneğin belirli bir listeye item ekleme işlemi için yetkisi olmayan kullanıcıdan alınan verileri o anda çalışmakta olan thread için “Sharepoint\system” account’una impersonate edebilirsiniz.

SPSecurity.RunWithElevatedPrivileges’ı kullanırken Current Site’ı içine alarak kullanmak yapılan temel yanlışlardan biridir. Çünkü current site thread’i zaten anonymous yetkisi ile yüklenmiştir. Örneğin:


SPSecurity.RunWithElevatedPrivileges(delegate() {
using (SPSite site = SPControl.GetContextSite(this.Context))
{
// kod bloğu buraya
}
});


Anonymous yetkisi ile yüklenen o anki thread’i “SPSecurity.RunWithElevatedPrivileges” bloğu içerisine almak ona “Sharepoint\system” yetkisi atamayacaktır. Bunun yerine “SPSecurity.RunWithElevatedPrivileges” kod bloğu içerisinde yeni bir SPSite instance’ı oluşturup gerekli işlemleri onun içerisinde yapmak sorunu çözecektir. Yukarıdaki kodun değişmiş şekli ise:



SPSecurity.RunWithElevatedPrivileges(delegate()
{
using(SPSite site = new SPSite(SPContext.Current.Site.ID))
{
SPWeb spWeb = site.AllWebs["/"];
// kod bloğu buraya
}
});

0 yorum: