Canvas Application Owner (Sahiplik) Bilgisi Değiştirme
Merhaba,
Bu yazıda Power Apps – Canvas Application ‘ların sahiplik (Owner) bilgisini değiştirmek için neler yapmamız gerekiyor detaylı olarak inceleyeceğiz.
Power Apps üzerinde bir Canvas Application oluşturduğumuzda işlem yaptığımız kullanıcı otomatik olarak ilgili uygulamanın sahibi (Owner) oluyor. İhtiyaç olduğunda farklı kullanıcıları Co-Owner olarak atayıp, uygulama üzerinde gerekli düzenlemeleri yapmalarını sağlayabiliyoruz.
Fakat bazı durumlarda uygulamanın sahiplik bilgisini tamamen farklı bir kullanıcı üzerine taşımamız gerekebilir. Örnek olarak ilgili kullanıcı artık projede ya da şirkette çalışmıyor olabilir, bu durumda Azure Active Directory üzerinde bu kullanıcının disable edilmesi ve ilgili Power Apps lisanslarının kaldırılması söz konusu olduğunda sahiplik bilgisini farklı bir kullanıcıya taşımamız gerekebilir.
Bu yazıyı hazırladığım tarihte sahiplik bilgisi değişimi make.powerapps.com ya da diğer admin portaller üzerinden maalesef yapılamıyor, yani herhangi bir UI işlemi söz konusu değil.
Bu işlemi yapmak için PowerShell komutlarından yararlanacağız.
PowerShell Modüllerinin Yüklenmesi
İlk olarak PowerShell ‘e ilgili PowerApps modüllerinin yüklenmesi gerekmekte. Bunun için aşağıdaki komutları kullanmamız gerekli.
Burada
-AllowClobber dikkatinizi çekmiş olabilir, bu flag ile ilgili olarak Microsoft ‘un https://docs.microsoft.com/en-us/power-platform/admin/powerapps-powershell adresinde yer alan dokümantasyonda detay yok, fakat PowerShell ‘in kendi dokümantasyonunda
Install-Module komutu altında bu flag için açıklama yer almakta.
-AllowClobber parametresi ile ilgili detaylara buradan erişebilirsiniz.
Kısaca anlatmak gerekirse
Microsoft.PowerApps.PowerShell modülünün
Microsoft.PowerApps.Administration.PowerShell modülü ile benzer komutlar yüklediğini ve
-AllowClobber flag ‘in bu komutlar için oluşabilecek hataları by-pass ettiğini söyleyebilirim.
Microsoft.PowerApps.Administration.PowerShell modülünde bulunan komutlar ve bunların kullanımları için Microsoft ‘un resmi dokümantasyonuna buradan ulaşabilirsiniz.
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell komutunu çalıştırdığınızda aşağıdaki gibi uyarı mesajı ile karşılaşıyoruz. Burada
A ile hepsine onay verebiliriz.
PowerShell modüllerimizi yükledik, bundan sonraki adım ise
Add-PowerAppsAccount komutunu kullanarak işlem yapmak istediğimiz kullanıcı hesabı ile oturum açmak.
Burada önemli olan nokta oturum açtığımız kullanıcının Office 365 Global Administrator ya da Azure Active Directory Global Administrator olması gerekmektedir.
Add-PowerAppsAccount komutu ile ilgili kullanım örneklerine buradan erişebilirsiniz. Eğer herhangi bir parametre kullanmadan direkt olarak komutu çalıştırırsak aşağıdaki gibi bir login ekranı ile karşılaşırız. Bu ekranda ilgili kullanıcı bilgilerini kullanarak oturum açabiliriz.
Hazırlık – Gerekli Bilgilerin Elde Edilmesi
Canvas Application sahipliğini değiştirmek için bazı bilgilere ihtiyacımız var. Bunlar;
- Canvas Application Id bilgisi
- Sahiplik ataması yapmak istediğimiz kullanıcının Id bilgisi
- İşlem yapmak istediğimiz Power Platform Environment Id bilgisi
Bir sonraki aşamaya geçmeden önce bu bilgileri bir kenarda tutmanın faydası olacaktır. Aşağıdaki adımları izleyerek gerekli bilgileri elde edebilirsiniz.
Canvas Application Id Bilgisi
Sahiplik bilgisini değiştirmek istediğimiz Canvas Application ‘ın Id bilgisine ihtiyacımız var. Bunun için make.powerapps.com sitesinde sol menüden Apps bağlantısına tıklayarak ya da uygulama bir Solution içinde ise, Solution ‘a girerek ilgili Canvas Application ‘a ulaşabilirsiniz.
Apps listesinde yetkimiz olan tüm uygulamaları (Canvas Application ve Model-Driven Application) görmekteyiz, burada işlem yapmak istediğimiz uygulamanın yanında bulunan üç nokta simgesine tıklayarak işlem menüsüne erişebiliriz. Açılan menüde Details bağlantısına tıklayarak ilgili Canvas Application detaylarına ulaşabiliriz.
Canvas Application detay sayfasında bulunan App ID bizim uygulamamızın kimlik bilgisidir, bir sonraki aşamada bu bilgisi kullanacağız, bu nedenle copy – paste ile bir kenarda tutmamızda fayda var.
Power Platform Environment Id Bilgisi
Gerekli olan bir diğer bilgi ise Power Platform Environment ID bilgisi. Burada dikkat etmemiz gereken nokta Environment ve Organization aynı şeyler değildir.
Power Platform Admin Center ‘da Environments başlığı altında sahip olduğumuz tüm environment bilgileri yer almaktadır. Herhangi birine tıkladığımızda aşağıdaki gibi bir ekran ile karşılaşırız. Dikkat ederseniz sayfada bulunan Organization ID bilgisi ile url ‘de bulunan GUID bilgisi aynı değil. Bizim kullanacağımız bilgi https://admin.powerplatform.microsoft.com/environments/environment/
{environmentid}/ adresinde yer alan
{environmentid} bilgisidir.
Kullanıcı (Owner) Id Bilgisi
İhtiyacımız olan son bilgi ise ilgili Canvas Application için atayacağımız yeni sahip (Owner) için kullanacağımız sistem kullanıcısının Id bilgisi. Bu bilgi Azure Active Directory ‘de ilgili kullanıcının Object ID bilgisidir. Bu bilgiye erişmek için Azure Portal ‘de Azure Active Directory ‘e giriş yaptıktan sonra ilgili kullanıcıyı seçmeniz yeterli.
Kullanıcı detay (profil) sayfası aşağıdaki gibidir, bu sayfada yer alan Object ID bilgisini kullanacağız.
Tüm bilgileri topladık ve hazırlıkları tamamladık. Bir sonraki aşamada Canvas Application ‘ın sahiplik bilgisini değiştireceğiz.
Canvas Application Owner (Sahiplik) Bilgisini Değiştirme
Set-AdminPowerAppOwner Komutu
Bu işlem için daha önce yüklemiş olduğumuz
Microsoft.PowerApps.Administration.PowerShell modülünde yer alan
Set-AdminPowerAppOwner komutunu kullanacağız.
Bu komut, daha önce elde etmiş olduğumuz bilgileri kullanarak ilgili Canvas Application ‘ın Owner bilgisini değiştirir. Aynı zamanda mevcut sahiplik yetkisine sahip olan kullanıcıyı da uygulamaya User olarak paylaştırır (Share).
Komutun kullanımı aşağıdaki gibidir, detaylar için Microsoft ‘un resmi dokümantasyonuna buradan erişebilirsiniz.
İlgili parametrelerin detayları;
-AppName : İşlem yapmak istediğimiz Canvas Application Id bilgisi
-AppOwner : Canvas Application ‘a yeni sahip olarak atamak istediğimiz kullanıcının Azure Active Directory ObjectID bilgisi
-EnvironmentName : İşlem yaptığımız Environment ‘in ID bilgisi
Set-AdminPowerAppOwner komutunu çalıştırdığımızda herhangi bir hata almadan işlemi tamamlarsak aşağıdaki gibi bir ekran görüntüsü ile karşılaşırız.
İşlemin başarılı olduğuna dair herhangi bir bilgilendirme bulunmuyor, fakat
Internal alanında yer alan bilgi işlemin sonucunu (Response) göstermektedir.
Hata durumunda ise diğer alanlar bilgi içermektedir.
Bu yazı için örnek olarak oluşturduğum Demo Application 01 isimli uygulamayı Emre GULCAN kullanıcısı üzerinden Test01 kullanıcısına taşıdım, başarılı işlemin sonucu aşağıdaki gibidir.
Emre GULCAN kullanıcısı halen aktif ve geçerli bir Power Platform lisansına sahip olduğu için aynı zamanda ilgili uygulamaya User olarak eklendi.
Hatalı İşlemler
Set-AdminPowerAppOwner komutunu çalıştırdığımızda birçok nedenden dolayı hata alabiliriz. Bu durumda aşağıdaki gibi bir ekran (ya da benzeri) karşılaşmaktayız.
Görüldüğü üzere hataya ait herhangi bir detay yer almıyor.
Eksik ya da hatalı parametre kullanımı, işlem yapan kullanıcının yetki problemleri ya da yeni sahip kullanıcının yetkisel problemleri nedeniyle hata alabiliriz. Bu hatanın detaylarına ulaşmak için en basit yöntem Fiddler kullanarak network trafiğini gözlemlemek. Yazının amacı Fiddler kullanımı olmadığı için detaylara çok fazla girmiyorum.
Hata aldığımız işlemi tekrarlamadan önce Fiddler ‘i açıp, F12 tuşu ile ya da File menüsü altından Capture Traffic seçeneğini aktif ederek tüm network trafiğini gözlemleyebiliriz. Biz işlem yaptığımızda aşağıdaki ekranda görüldüğü gibi https://api.powerapps.com adresine istek yapılmakta. İsteğe tıkladığımızda Response bilgilerine erişebiliriz.
Burada hatalı işlem için dönen response bilgisini JSON ya da Raw olarak formatlayabilir ve detaylara erişebiliriz.
Yapmış olduğumuz işleme dair hata mesajında; işlem yaptığımız kullanıcının herhangi bir yetkisi olmadığına dair hata alınmış. Buradaki bilgileri aratarak almış olduğunuz hatayı hızlıca çözümleyebilirsiniz.
Birden Fazla Uygulamanın Sahiplik Bilgisini Tek Seferde Değiştirmek
Buraya kadar tek bir uygulama üzerinde sahiplik bilgisi değiştirmeyi adım adım inceledik. Fakat ilgili kullanıcının birden fazla uygulaması olabilir, bu durumda tüm uygulamalar için tek tek işlem yapmak hem zaman alıcı bir işlem hem de hata oluşma ihtimalini içermekte. Bu durumda ek komutlar kullanarak bu işlemi otomatikleştirebiliriz.
Örnek için TEST01 kullanıcısının sahipliğinde olan tüm uygulamaları Emre GULCAN kullanıcısına atayacağız.
Get-AdminPowerApp Komutu
Öncelikli olarak TEST01 kullanıcısına ait olan uygulamaları listeleyelim, bunun için
Get-AdminPowerApp komutunu kullanacağız. Bu komut gönderilen parametreler doğrultusunda kriterlere uygun tüm uygulamaları listelemekte. Komutun detaylı kullanımı için Microsoft ‘un resmi dokümantasyonuna buradan erişebilirsiniz.
Aşağıdaki ekran görüntüsünde görüldüğü üzere
Get-AdminPowerApp komutu tüm uygulamaları listeledi.
Bu uygulamaları toplu olarak güncelleyebilmek için yapacağımız işlem basit bir döngü ile tüm kayıtlar arasında dolaşıp
Set-AdminPowerAppOwner -AppName '{guid}' -AppOwner '{guid}' -EnvironmentName '{guid}' komutunu çalıştırmak.
PowerShell ‘de bulunan
ForEach-Object komutu ile bu işlemi kolayca yapabiliriz.
ForEach-Object komutunun detaylarına buradan ulaşabilirsiniz.
Kodumuzun son hali genel olarak
Get-AdminPowerApp -Owner '{guid}' -EnvironmentName '{guid}' | ForEach-Object{ Set-AdminPowerAppOwner -AppName '{guid}' -AppOwner '{guid}' -EnvironmentName '{guid}' } şeklindedir. Elbette bu kod üzerinde
ForEach-Object döngüsünde elde edeceğimiz değerleri kullanacağız.
Parametrik olarak çalışacak kodumuz aşağıdaki gibidir;
Get-AdminPowerApp -Owner '{guid}' -EnvironmentName '{guid}' | ForEach-Object { Set-AdminPowerAppOwner -AppName $_.AppName -AppOwner $Global:currentSession.userId -EnvironmentName $_.EnvironmentName }
Kullandığım parametrelerin detayları;
$_.AppName:
ForEach-Objectdöngüsü içinde ilgili kaydın AppName bilgisini kullanıyoruz. Burada Canvas Application Id (GUID) bilgisi geliyor.
$Global:currentSession.userId: PowerShell ‘de bulunan bir değişken. Burada
currentSession.userId, oturum açtığımız kullanıcı Azure Active Directory Object ID bilgisini dönmekte. Elbette ben Canvas Application sahiplik bilgisini oturum açtığım kullanıcıya atadığım için bu şekilde kullandım, eğer farklı bir senaryonuz varsa kullanıcı Id bilgisini statik olarak verebilirsiniz.
$_.EnvironmentName:
ForEach-Objectdöngüsü içinde ilgili kaydın EnvironmentName bilgisini kullanıyoruz. Burada Canvas Application ‘ın bulunduğu Environment Id (GUID) bilgisi geliyor. Bu bilgiyi statik olarak verebiliriz, fakat zaten result içinde geldiği için direkt kullanmak işimizi kolaylaştırır, hata riskini düşürür.
Bir yazının daha sonuna geldik. Aslında basit bir kaç komut kullanarak yaptığımız işlemi mümkün olduğunca detaylı bir şekilde anlatmaya çalıştım.
Umarım faydalı bir yazı olmuştur.