Power Automate İle Kullanıcıya Güvenlik Rolü Atama

Merhaba,

Bu yazıda Power Automate kullanarak sistem kullanıcılarımıza (SystemUser) Güvenlik Rolü (Security Role) ataması yapacağız.

Bildiğiniz gibi herhangi bir kullanıcının Dataverse üzerinde işlem yapabilmesi için en az bir Güvenlik Rolüne ihtiyacı bulunmaktadır. Herhangi bir sebepten dolayı Güvenlik Rolü atama işlemini otomatikleştirmek isteyebiliriz.

Eğer ilgili Power Platform instance üzerinde sadece bir Business Unit bulunuyorsa bu işlem kolay sayılabilir, fakat birden fazla ve birbiri ile ilişkili Business Unit bulunuyorsa işlem biraz daha karmaşık hale gelecektir.

Bildiğiniz gibi ana (root) Business Unit üzerinde oluşturulan tüm Güvenlik Rolleri alt Business Unit ‘ler üzerinde de birer kopya olarak bulunmaktadır, fakat Id (GUID) bilgileri değişmektedir.

SystemUser – Role İlişkisi Nasıl Yapılıyor?

Güvenlik konusu başlı başına kapsamlı ve ayrı incelenmesi gereken bir konu, fakat hızlıca “hap niteliğinde” bilgi vermek gerekirse, Dataverse tarafında kullanıcı ve Güvenlik Rol bilgileri aşağıdaki tablolarda tutulmaktadır.

  • Sistem Kullanıcıları : dbo.systemuser
  • Güvenlik Rolleri : dbo.role
  • Sistem Kullanıcı – Güvenlik Rol Eşleştirmeleri : dbo.systemuserroles (buradaki çoğul ek –s– önemli)

Dataverse Role Tablosu
Dataverse Role Tablosu
Dataverse SystemUserRoles Tablosu

systemuserroles tablosu N:N (many-to-many) ilişki bilgileri içeren bir ara (intersect) tablodur. Bu nedenle bu tablo üzerinde kayıt oluşturmak istediğimizde Dataverse SDK ‘da yer alan Create metodu kullanılmaz, bunun yerine N:N ilişki oluşturmamıza yarayan Associate metodunu kullanmaktayız.

Eğer C# ile SDK kullanarak yapmak isterseniz örnek koda GitHub üzerinden ulaşabilirsiniz.

Power Automate – Relate Rows

Associate işleminin Power Automate tarafında karşılığı Dataverse grubu altında bulunan Relate Rows action ‘dır.

Power Automate - Dataverse Relate Rows action
Power Automate – Dataverse Relate Rows action

Bu action ‘ı kullanarak en basit haliyle aşağıdaki gibi ilgili kullanıcıya bir Güvenlik Rolü atayabilirsiniz.

Power Automate ile Kullanıcıya Güvenlik Rolü Atama
Power Automate ile Kullanıcıya Güvenlik Rolü Atama

Action içinde kullandığımız alanlar;

  • Table name : İşlem yapmak istediğimiz ana tablo adıdır. Burada sistem kullanıcısı tablosunu (Users) seçiyoruz
  • Row ID : ana tablo üzerinde işlem yapacağımız kaydın Primary Key (GUID) bilgisi. Biz işlem yapmak istediğimiz kullanıcı ID bilgisini veriyoruz. (benim örneğimde Trigger, Users tablosunda alan değişikliği olduğu için User ID bilgisi direkt olarak kullanılabilir durumda, siz kendi senaryonuza göre bu bilgiyi elde edip kullanmalısınız)
  • Relationship : Ana tablo ile N:N olarak ilişkili tablo ve bu ilişkinin adı. Burada Associate / Relate Rows kullanmak istediğimiz ilişkiyi seçiyoruz. Güvenlik Rolü atama için Security Role - systemuserroles_association kullanmamız gerekli.
  • Relate with : Bu alana atama yapmak istediğimiz Güvenlik Rolü ‘nün ID bilgisini giriyoruz.

Eğer tek Business Unit kullanıyorsanız işleminiz bu kadar kolay.


Birden Fazla Business Unit Olması Durumunda;

Birden fazla alt Business Unit olması gibi daha karmaşık durumlarda ise aşağıdaki örnek Power Automate akışını kullanabilirsiniz.

Power Automate - Kullanıcı - Güvenlik Rolü ilişkilendirme
Power Automate – Kullanıcı – Güvenlik Rolü ilişkilendirme

Bu örnekte sırasıyla;

  • İşlem yapmak istediğimiz kullanıcının (SystemUser) Departman (Business Unit) bilgisini alıyoruz. (benim örneğimde Trigger, Users tablosunda alan değişikliği olduğu için User ID bilgisi ve ilişkili diğer bilgiler direkt olarak kullanılabilir durumda, siz kendi senaryonuza göre öncelikli olarak bu bilgileri elde edip gerekli değişken vb. atamalarını yapmalısınız)
  • Daha sonra kullanmak kolay olsun diye 3 değişken tanımlaması yapıyorum
    • BusinessUnitId
    • SecurityRoleId
    • SecurityRoleName
  • Switch : User Type aşamasında, kullanıcı üzerinde bir alan kontrolü ile SecurityRoleName bilgisini düzenliyorum. Sizin senaryonuzda buna ihtiyacınız olmayabilir, bu durumda SecurityRoleName değişkenini oluşturma aşamasında statik değer olarak atayabilirsiniz.
  • Get Security Role List isimli action ‘da yukarıda tanımladığım parametreler ile Güvenlik Rolü (Security Roles) tablosunda sorgulama yapıyorum (List Rows)
    • Eğer bilgiler doğru ise normal şartlarda 1 adet kayıt dönmesi gerekiyor. Fakat kullanmış olduğumuz List Rows action geri dönüşü collection olduğu için burada first(outputs('Get_Security_Role_List')?['body/value'])['@odata.id'] expression ile ilk kaydın ID bilgisini alıp SecurityRoleId değişkenine atıyorum.
    • Kayıt bulunmaması vb. gibi durumlarda elbette hata oluşacaktır, bununla ilgili olarak gerekli kontrolleri yapmanızda fayda var

Power Automate - Dataverse List Rows action
Power Automate – Dataverse List Rows action

  • Add Security Role isimli action ‘da ise yukarıda elde ettiğim bilgileri kullanarak Kullanıcı – Güvenlik Rolü eşleştirmesini (Relate Rows) yapıyorum.
Power Automate ile Kullanıcıya Güvenlik Rolü Atama
Power Automate ile Kullanıcıya Güvenlik Rolü Atama

Elbette farklı senaryolara ihtiyacınız olabilir, bu durumda Power Automate adımlarının karmaşıklığı artacaktır, fakat önemli olan nokta Kullanıcı – Güvenlik Rolü eşleştirmesini Relate Rows ile yaptığımızı unutmamanız 😉


Umarım faydalı bir yazı olmuştur.

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.