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.

Dynamics 365 CE menüsü
Dynamics 365 CE menüsü
Security (Güvenlik) sayfası
Security (Güvenlik) sayfası
Dynamics 365 Güvenlik Rolleri
Dynamics 365 Güvenlik Rolleri
Delegate (Temsilci) Güvenlik Rolü
Delegate (Temsilci) Güvenlik Rolü

Ö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.

IOrganizationService.CallerId ile impersonte işlemi
IOrganizationService.CallerId ile impersonte işlemi
ConnectionHelper ‘a Dynamics 365 CE kullanıcı ID bilgisi gönderilmesi
ConnectionHelper ‘a Dynamics 365 CE kullanıcı ID bilgisi gönderilmesi

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;

prvReadContact yetkisi hatası
prvReadContact yetkisi hatası

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.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.