Çoğu uygulamada, kullanıcının rolüne bağlı olarak erişim kontrolüne ihtiyaç vardır. Bu derste, bir web uygulaması için böyle bir kontrol kurma örneğine bakacağız. Bu görevin bir parçası olarak şunları yapmanız gerekecek:
- Kullanıcı rolünü tanımlayın
- Role bağlı olarak, gezinme menüsü öğelerinin görüntüsünü kontrol edin
- Belirli bir role erişilemeyen sayfalara gitmeyi imkansız hale getirin
ilk hazırlık
Hazırlık kısmı ile başlayalım. Daha fazla yapılandırma kolaylığı için, geçerli kullanıcı hakkında bilgi depolayacak genel bir değişken oluşturmak gereklidir. Böylece bir kontrol yapmanız gerekirse her seferinde backend ile iletişime geçip kullanıcı hakkında bilgi istemenize gerek kalmayacak. Global değişkenden gerekli verileri okumanız yeterli olacaktır.
Yetkili bir kullanıcının uygulamaya girebileceği çeşitli seçenekleri dikkate almak gerekir:
- Giriş sayfasındaki başarılı yetkilendirme sonucunda Login yapın.
- Kayıt sonucunda giriş yapın.
- Halihazırda yetkili olan kullanıcılar için belirli bir sayfaya bağlantı yoluyla doğrudan giriş yapın.
Bu durumların her birinde, kullanıcı hakkında bilgi döndüren bir arka uç sorgusu kullanılır. İlgili iş sürecinde, daha önce oluşturduğunuz User_gv genel değişkenini kaydetmek için yalnızca bir Set Variable bloğu eklemeniz gerekir.
Bu blok, iş süreçleri bölümündeki Prebuilt klasöründe yer alan yetkili kullanıcılar için CheckAuth iş sürecine eklenir.
Giriş veya kayıt sayfaları aracılığıyla giriş yapmak için blok, ilgili düğmelerin iş süreçlerine eklenir.
Uygulamanın başlangıç sayfasından sonucu kontrol edelim. Bunun için kullanıcıyı adıyla selamlayacak ve rolüne göre yönetici olup olmadığını yazacak bir Label ekleyelim.
Herhangi bir Label görüntülendiğinde harekete geçen bir iş süreci ayarlamanız gerekir ( Label onShow tetikleyicisi).
- Expand User . Kullanıcının adı ve rolleri hakkında bilgi için.
- In Array . Belirtilen kullanıcının Admins grubunda olup olmadığını kontrol etmek için.
- If-Else . Kontrolün sonuçlarına bağlı olarak eylemlerin değişkenliği için.
- Set Variable (String) . Kullanıcı Admins grubunun bir üyesi değilse " NOT " veya öyleyse boş bir değere sahip bir String değişkeni oluşturmak için.
- Concat Strings (Multiple) . " Hi, Ken. You are NOT Admin ”.
- Label Update Properties . Bu cümlenin sayfada son gösterimi için.
Her şey doğru yapılırsa, sayfaya girmenin herhangi bir çeşidi ile ekran benzer bir sonuca sahip olacaktır.
Menü öğeleri görünürlük kontrolü
Şimdi ana kısma geçme zamanı. Yalnızca Yöneticilere yönelik bir sayfa oluşturalım ve ilgili menü öğesini ( Admin Page ) ekleyelim. En iyi çözüm, görünürlüğünü varsayılan olarak devre dışı bırakmaktır.
Navigate bloğunu kullanarak, Page parametresinde oluşturulan sayfayı seçmeli ve bu sayfanın kimliğini öğrenmelisiniz.
Bu örnekte, kısıtlı erişime sahip yalnızca bir sayfa vardır, ancak bu tür çok sayıda sayfa olduğunda seçeneği hemen öngörmek ve sayfa listesini depolamak için genel bir salt okunur değişken oluşturmak daha iyidir.
Daha sonra, navigasyon menüsü öğelerinin görünürlüğünü kontrol etmek için iş sürecinin kendisini oluşturmanız gerekir (buna Set NavItem Visibility ).
- Expand User . Kullanıcı rolleri hakkında bilgi için.
- In Array . Belirtilen kullanıcının Admins grubunda olup olmadığını kontrol etmek için.
- For each loop . Global değişkende belirtilen tüm sayfalar için döngüyü çalıştırmak.
- NavItem Update Properties . Kullanıcının yönetici olup olmamasına bağlı olarak bir öğenin görünürlüğünü kontrol etmek için.
Giriş ve kullanıcı kayıt butonlarının iş süreçlerinde ana sayfaya gitmeden önce oluşturulan iş sürecinin bloğu eklenmelidir (daha önce mevcut kullanıcı hakkında bilgi içeren bir değişkeni kaydetmek için bunlara Set Variable blokları ekleniyordu).
Doğrudan bağlantı yoluyla erişim kontrolü
Yapılacak son şey, " On app launch " tetikleyicisi tarafından uygulama her başlatıldığında yürütülen bir iş süreci ayarlamaktır. Önceki adımda olduğu gibi, kimliği doğrulanmış kullanıcılar için Set NavItems Visibility bloğunu ekleyin.
Ek olarak, kapalı bir sayfaya doğrudan bağlantı yoluyla erişime karşı koruma sağlamak gerekir:
- In Array (Admin_pages) . Hedef sayfanın yalnızca yönetici sayfaları listesinde olup olmadığını kontrol etmek için.
- If-Else . Kontrolün sonuçlarına bağlı olarak eylemlerin değişkenliği için. False ise, belirtilen sayfaya gidebilirsiniz. True durumunda, bu sayfaya erişim hakkı için ek bir kontrol gereklidir.
- Expand User . User_gv global değişkeninden kullanıcı bilgilerini okumak için.
- In Array . Admins grubundaki üyeliği kontrol etmek için.
- If-Else . Yönetici haklarının varlığına veya yokluğuna bağlı olarak eylemleri seçmek için.
- Navigate Uygun haklara sahip olmayan bir kullanıcının sadece yöneticilere yönelik bir sayfayı açmaya çalışması durumunda gerekli sayfaya gitmek veya başlangıç sayfasına yönlendirmek.
Seçilen sayfalar artık yetkisiz erişime karşı korunmaktadır. Hakların yokluğunda, menüde gösterilmezler ve doğrudan bir bağlantı üzerinden bile erişilemezler.
Belirli sayfalar için erişim korumasının, o sayfalarda kullanılabilecek uç noktalar için otomatik koruma anlamına gelmediğini unutmamak önemlidir. Bunu yapmak için, gerekirse, Middleware Token Auth ayarlarında, seçilen uç noktaya erişim hakları olan kullanıcı gruplarını belirtmeniz gerekir.