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
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell

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.

Install-Module -Name Microsoft.PowerApps.Administration.PowerShell Warning
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell Uyarı

Install-Module -Name Microsoft.PowerApps.PowerShell -AllowClobber
Install-Module -Name Microsoft.PowerApps.PowerShell -AllowClobber
Install-Module -Name Microsoft.PowerApps.PowerShell -AllowClobber Warning
Install-Module -Name Microsoft.PowerApps.PowerShell -AllowClobber Uyarı

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.

Microsoft Authentication Sayfası
Microsoft Authentication Sayfası

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.

PowerApps - Canvas App Listesi
PowerApps – Canvas App Listesi

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.

PowerApps - Canvas App Detayları
PowerApps – Canvas App Detayları

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.

Power Platform Admin Center - Environment List
Power Platform Admin Center – Environment Listesi
Power Platform Admin Center - Environment Detay
Power Platform Admin Center – Environment Detay

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.

Azure Active Directory - Kullanıcı Detayı
Azure Active Directory – Kullanıcı Detayı

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.

Set-AdminPowerAppOwner İşlem Sonucu
Set-AdminPowerAppOwner İşlem Sonucu

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.

PowerApps - Canvas App Listesi
PowerApps – Canvas App Listesi

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.

PowerApps - Canvas App Share
PowerApps – Canvas App Share

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.

Set-AdminPowerAppOwner Forbidden Error
Set-AdminPowerAppOwner Forbidden Error

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.

Set-AdminPowerAppOwner Forbidden Error - Fiddler Detay
Set-AdminPowerAppOwner Forbidden Error – Fiddler Detay

Burada hatalı işlem için dönen response bilgisini JSON ya da Raw olarak formatlayabilir ve detaylara erişebiliriz.

Set-AdminPowerAppOwner Forbidden Error - JSON Message
Set-AdminPowerAppOwner Forbidden Error – JSON Message

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.

Get-AdminPowerApp Komutu
Get-AdminPowerApp Komutu

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.

Get-AdminPowerApp Komutu ve ForEach-Object ile Döngü Oluşturma
Get-AdminPowerApp Komutu ve ForEach-Object ile Döngü Oluşturma

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-Object dö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-Object dö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.

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.