OrganizationServiceProxy Impersonate – Farklı Bir Kullanıcı Yerine İşlem Yapmak
Bu yazı 02 Mart 2019 tarihinde Medium/@dynamics365 altında yayınlanmıştır. 28 Nisan 2020 tarihinde emregulcan.com altında taşınmıştır.
İçerikler, yazının oluşturulduğu tarih için geçerli olup, Microsoft Dynamics 365 CE, Power Platform ve Azure hizmetlerinin sürekli iyileştirme ve güncelleme döngüsünden dolayı paylaşılan bilgilerde değişiklikler meydana gelmiş olabilir.
Merhaba,
Önceki yazımızda Dynamics 365 CE (CRM) OrganizationService ‘e nasıl bağlanacağımızı anlatmıştım.
Bu yazıda ise oluşturduğumuz OrganizationServiceProxy
ile farklı bir kullanıcı adına ve onun yetkileriyle nasıl işlem yaparız konusunu anlatacağım.
Eğer hazırladığımız uygulama aracılığıyla kullanıcıdan Dynamics 365 login bilgilerini (kullanıcı adı ve parola) alabiliyorsak zaten işimiz kolay, önceki yazımızda kullandığımız metotlara bu kullanıcı adı ve parola bilgisini gönderip, ilgili kullanıcı için IOrganizationService
oluşturabiliriz.
Fakat projelerin büyük bir bölümünde, özellikle entegrasyon projelerinde, böyle bir imkanımız olmuyor. Çoğu zaman yazdığımız uygulama yada web servislere (SOAP, REST) kullanıcıyı tanımlayan bir kod, kullanıcı adı yada ID bilgisi gibi bizim için çok kullanışlı olmayan bilgiler gönderiliyor.
Peki elimizde herhangi bir authentication bilgisi (kullanıcı adı ve parola) olmadan, farklı bir kullanıcı adına ve onun yetkileri ile IOrganizationService ‘i nasıl kullanabiliriz?
Dynamics 365 CE (CRM) ile çok kolay 👍
Dynamics 365 CE (CRM) proje ekibi bu ihtiyacı öngörmüş ve SDK içinde IOrganizationService ‘i farklı bir kullanıcı adına kullanabilmemiz için çok basit ve etkili bir özellik sağlamış.
İngilizcesi impersonate olan, Türkçe ‘ye taklit etmek ya da yerine geçmek olarak çevirebileceğimiz bu özelliği OrganizationServiceProxy ‘in CallerId
property ‘ine ilgili kullanıcının Dynamics 365 CE (CRM) Id (Guid
) bilgisini göndererek kullanıyoruz.
Elbette bunu yapabilmek için IOrganizationService ‘e oturum açtığımız kullanıcının Act on Behalf of Another User (Başka Bir Kullanıcı Adına Hareket Etme) (prvActOnBehalfOfAnotherUser) yetkisi olmalıdır.
Bu yetki Delegate (Temsilci) güvenlik rolünde default olarak bulunmaktadır, dolayısıyla ilgili kullanıcıya bu rolü tanımlamamız yeterli olacaktır. Fakat bu yetkiyi tanımlamadan önce iyi düşünmek ve planlama yapmak gerekli. Dynamics 365 CE (CRM) ‘i kullanan tüm kullanıcılar diğer kullanıcılar adına işlem yapabilme imkanına sahip olması güvenlik açısından riskli bir durum oluşturabilir.
Genellikle bu işlem admin hesap üzerinden IOrganizationService
authentication işlemleri yapılarak, farklı bir kullanıcı ile işlem yapmak için kullanılmaktadır.
İstersek diğer güvenlik rolleri için de aynı tanımlamayı yapabiliriz. Bunun için Settings (Ayarlar)> Security (Güvenlik)> Security Roles (Güvenlik Rolleri) bağlantılarını kullanarak ilgili sayfaya erişmeliyiz.
Önceki yazımızda hazırladığımız ConnectionHelper ‘da bulunan aşağıdaki kod yapısı bize impersonate imkanı tanımakta.
Eğer callerId
parametresine geçerli bir Dynamics 365 CE kullanıcı ID bilgisi gönderirsek, oluşturduğumuz OrganizationServiceProxy
artık o kullanıcının yetkileri ile işlem yapacaktır.
Eğer kullanıcının ilgili işlem için yeterli yetkisi yoksa Dynamics 365 CE SDK aşağıdaki gibi hata oluşturacaktır;
Principal user (Id = ….., type=8, roleCount=1, privilegeCount=9, accessMode=0, is missing prvReadContact privilege (Id =…..)
Burada dikkat etmemiz gereken yerler;
- Principal user Id : burada belirtilen ID (GUID) bilgisi ilgili kullanıcının Dynamics 365 CE ID bilgisidir.
- type=8 : İşlem yapan principal ‘ın SystemUser (kullanıcı) olduğunu belirtir. 8 Dynamics 365 CE ‘de SystemUser ‘ın EntityTypeCode değeridir.
- missing prvXXXX : Yapılan işleme göre, ilgili kullanıcının ihtiyaç duyduğu fakat sahip olmadığı yetki bilgisidir. Eğer gerekli ise güvenlik rolleri üzerinden ilgili yetki için tanımlama yapılabilir.
Impersonation Dynamics 365 CE SDK işlemleri için basit ama önemli bir konu, umarım bu yazı faydalı olmuştur.
Daha detaylı bilgi için Dynamics 365 CE SDK ‘ya göz atabilirsiniz.
Dynamics 365 CE (CRM) SDK konusunda ilgili tüm yazılara tek nokta üzerinden ulaşmak isterseniz http://www.emregulcan.com/dynamics365-sdk adresine bakabilirsiniz.