anonymous access etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
anonymous access etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

20 Mart 2009 Cuma

Sharepoint Web Service ile kullanıcı profil bilgilerini okuma


aşağıdaki kod blogu ile sharepoint web servislerini kullanarak
kullanıcı profil bilgilerine erişebilmekteyiz.


Sharepoint Web Service'lerinden http://DomainAdı/_vti_bin/userprofileservice.asmx referans olarak eklememiz gerekmekte.





private string UserProfile(string pAccountName, string pFieldName)
{
string FieldValue = null;
MyUserProfileWebService.PropertyData[] userProps = null;
MyUserProfileWebService.UserProfileService myUserService = new MyUserProfileWebService.UserProfileService();
myUserService.Credentials = System.Net.CredentialCache.DefaultCredentials;

try
{
userProps = myUserService.GetUserProfileByName(pAccountName);
if (userProps != null || userProps.Length > 0)
{
for (int i = 0; i < userProps.Length; i++)
{
MyUserProfileWebService.ValueData[] values = userProps[i].Values;

if (userProps[i].Name == pFieldName)
{
if (values.Length > 0)
{
FieldValue = values[0].Value.ToString();
}
}
}
}
}
catch (Exception ex)
{
// exception anında yapılacak işlemler yapılır.
}

return FieldValue;
}


yukarıdaki kodla anonim kullanıcıyla da kullanıcı profil bilgilerine erişim sağlamış oluyoruz.

19 Mart 2009 Perşembe

anonymous user ile kullanıcı profil bilgilerini okuma


Bir önceki yazımda "web partları anonim erişime uygun şekilde geliştirmeliyiz" demiştim.
Böyle dememin nedeni: Geliştirdiğimiz web partlardaki login olmamış kullanıcıların görmemesi gereken alanları göstermemektir ki
bunu da Context.User.Identity.IsAuthenticated ile kontrol edebiliriz.

Ayrıca eğer WebPartınızda kullanıcı profil sayfasına erişim varsa anonim kullanıcı ile erişmeye çalıştığınızda hata ile karşılacaksınız.

Hata ile karşılaşmayarak kullanıcı profilinden veri okumak
istediğimizde object model ve Sharepoint WebServiceleri karşımıza çıkmakta.

Burada hangisini kullanacağınız size kalmış bir durumdur.Altı çizilmesi gereken bir durum var ki o da web servislerinin daha hızlı olduğu ve tavsiye edildiğidir.

Object Model ile kullanıcı bilgilerine erişmek



private string GetUserProfileFieldValue(string pName, string pFieldName)
{
HttpContext currentContext = HttpContext.Current;
string FieldValue = null;

try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb web = site.OpenWeb("/"))
{
ServerContext context = ServerContext.GetContext(site);
HttpContext.Current = null;
UserProfileManager profileManager = new UserProfileManager(context);
string[] n = pName.Split(';');
SPUser user = web.AllUsers.GetByID(Convert.ToInt32(n[0].ToString()));
UserProfile userProfile = profileManager.GetUserProfile(user.LoginName);
if (userProfile != null)
{
FieldValue = userProfile[pFieldName].Value.ToString();
}
}
}
});
}
catch (Exception ex)
{
// exception anında yapılacak işlemler yapılır.
}
HttpContext.Current = currentContext;
return FieldValue;
}


Yukarıdaki kod bölümü ile anonim kullanıcı ile profil bilgilerine ulaşabilmekteyiz.
Gelin satır satır kodumuzu inceleyelim.



private string GetUserProfileFieldValue(string pName, string pFieldName)
{
// o anki current context'i tanımladığımız context'e atıyoruz.
HttpContext currentContext = HttpContext.Current;

// geri donecek değerin tutulacağı değişkenimiz.
string FieldValue = null;

try
{
// Full Control sağlamak içib RunWithElevatedPrivileges kullandık.
// Bakınız
SPSecurity.RunWithElevatedPrivileges(delegate()
{
// current sitemızı Id ile kullanıma alıyoruz.
using (SPSite site = new SPSite(SPContext.Current.Site.ID))// Microsoft.Sharepoint.dll
{
// root webe erişiyoruz.
using (SPWeb web = site.OpenWeb("/"))
{
// kullanıcı profilinden veri okuyabilmemiz için gerekmekte.
// Microsoft.Office.Server.dll referans edilmelidir.
// C:\Program Files\Common Files\microsoft shared\web server extensions\12\ISAPI klasöründe bulabilirsiniz.
ServerContext context = ServerContext.GetContext(site);

// contextimizi null'a çekiyoruz.
HttpContext.Current = null;

// sitemize ait olan kullanıcı profiline erişim sağlıyoruz.
UserProfileManager profileManager = new UserProfileManager(context);

// Sharepoint'den SPListItem tipinden değer aldığınız takdirde kullanıcı bilgileri
// 1;#Adil ERKAN şeklinde kullanıcı Id'si ve adı ile birlikte size değer gelecektir.
// Burada Id'ye göre değer okuyacağımız için split ile ayırıyoruz.
string[] n = pName.Split(';');

// AllUser's altındaki parametre ile gelen kullanıcının id'sine göre bilgilerini alıyoruz.
SPUser user = web.AllUsers.GetByID(Convert.ToInt32(n[0].ToString()));
// GetUserProfile ile kullanıcının LoginName'ile bilgilerini UserProfile tipindeki değişkenimize atıyoruz.
UserProfile userProfile = profileManager.GetUserProfile(user.LoginName);

// kullanıcı profili varsa parametre ile gelen alanın değerini geri dönen değişkemize atıyoruz.
if (userProfile != null)
{
FieldValue = userProfile[pFieldName].Value.ToString();
}
}
}
});
}
catch (Exception ex)
{
// exception anında yapılacak işlemler yapılır.
}

// methodumuzun başında atadığımız context'i iade ediyoruz.
HttpContext.Current = currentContext;

// değeri döndürüyoruz
return FieldValue;
}



referans : SharePoint User Profile Access Issues

Bir sonraki yazımda Sharepoint Web Service yardımı ile kullanıcı profil erişimini nasıl yapacağımızı yazacağım.

Bir Shapoint sitesini Anonymous Access (Anonim Erişime) Açmak



Sharepoint portal üzerindeki bilgileri anonymous access'e açmak için Central Administrator'da anonim erişime izin vereceğiniz web application'ın Authentication providers'da ilgili alanı işaretlememiz yeterli olacaktır.



Central Administration -> Application Management -> Authentication Providers burada sağ üst köşede yapacağıamız değişikliğin uygulancağı web applicatiın'ımızı seçiyoruz. -> Resim'deki altı çizili alan olan Enable anonymous access işaretliyoruz.



Geliştirmenizi bu doğrultuda yapmanız kullanıcı hakları ve güvenlik açısından önemli bir noktadır.
Giriş yapmış ve yapmamış kullanıcıların görebileği yerlerdeki ayarları ve web partları anonim erişime uygun şekilde geliştirmeliyiz.