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:
Yorum Gönder