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)
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.
Bu action ‘ı kullanarak en basit haliyle aşağıdaki gibi ilgili kullanıcıya bir Güvenlik Rolü atayabilirsiniz.
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.
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 durumdaSecurityRoleName
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ıpSecurityRoleId
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
- 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
- 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.
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.