paint-brush
Açık Kaynak Projemizde Erişim Onayını Nasıl Uyguladımby@hacker6428749

Açık Kaynak Projemizde Erişim Onayını Nasıl Uyguladım

9m2024/07/25
Read on Terminal Reader

Üniversite öğrencilerine yönelik bir not paylaşım platformu olan Makaut Buddy, kullanıcı yüklemelerini güvenli bir şekilde yönetme konusunda zorluklarla karşılaştı. Bu makale, Permit.io kullanarak Rol Tabanlı Erişim Denetimi'nin (RBAC) uygulanmasının sorunu nasıl çözdüğünü, yalnızca yetkili kullanıcıların içerik yükleyebilmesini sağlayarak platformun güvenliğini nasıl artırdığını açıklamaktadır.
featured image - Açık Kaynak Projemizde Erişim Onayını Nasıl Uyguladım
undefined HackerNoon profile picture
0-item
1-item


Birkaç gün önce bazı meslektaşlarım, üniversitemiz için tasarlanmış, öğrencilerin üst notlarını, geçmiş sınav sorularını ve YouTube derslerini verimli bir şekilde paylaşmalarına yardımcı olmayı amaçlayan bir not paylaşım platformu olan Makaut Buddy adlı Açık Kaynak uygulamasıyla ilgili bir sorunla ilgili olarak bana ulaştı. .


Kaynakları yüklemek için başarılı bir sistem geliştirmiş olsalar da, yalnızca yetkili kişilerin içerik yükleyebilmesini sağlama konusunda bir zorlukla karşılaştılar.


Aşağıdaki demoda gösterildiği gibi, herhangi bir kullanıcı kaydolduktan sonra bir kaynak oluşturabilir. Bu büyük bir sorun oluşturdu çünkü kullanıcıların ne yükleyeceğini düzenleyemedik, hatta bazıları zararlı veya rahatsız edici içerik bile yüklemiş olabilir.

Başlangıçta bir Yönetici rolü tanımladılar ve seçilmiş bir grup kişiye yönetici ayrıcalıkları verdiler. Ancak rol sayısı arttıkça kod giderek daha karmaşık ve yönetilmesi zor hale geldi.


İşte o zaman , Permit gibi üçüncü taraf yetkilendirme araçlarının yardımıyla Rol Tabanlı Erişim Denetimi (RBAC) modelini kullanarak yetkilendirmeyi yönetmenin etkili yolları hakkında farkındalığı artırmak için bu makaleyi yazma fikri aklıma geldi.


RBAC'yi uygulamanın yanı sıra Erişim Onayı İsteği sistemini de kullanıma sunduk. Bu sistem, içerik yüklemek isteyen herhangi bir kullanıcının önce erişim talebinde bulunmasını, ardından yöneticinin bunu onaylayabilmesini veya reddedebilmesini sağlar. Bu eklenen güvenlik katmanı, Makaut Buddy'deki içeriğin bütünlüğünü korumamıza yardımcı olur.


Bu yazımda programlama dili olarak JavaScript , çerçeve olarak Next.js kullandım. Ancak burada tartışılan kavramlar dile özgü değildir ve bunları tercih ettiğiniz programlama dilinde uygulayabilirsiniz.


Bu makalenin sonunda uygulamanıza temel bir RBAC modeli uygulayacağınızı öğreneceksiniz.


Bununla birlikte, hadi dalalım!


Yetkilendirme Nedir?

Okula koştuğun sabahları hatırlıyor musun? Kimliğinizi kontrol eden güvenlik görevlisi, kimlik doğrulamanın mükemmel bir örneğidir. Kampüse girmesine izin verilen bir öğrenci olarak kimliğinizi doğruluyorlar. Ama bu sadece ilk adım. Kimlik tespit edildikten sonra bile herhangi bir sınıfa öylece girmezsiniz, değil mi? Yetkilendirmenin devreye girdiği yer burasıdır.


Ders programınızı yetkiniz olarak düşünün. Rolünüze (o sınıfa kayıtlı öğrenci) bağlı olarak belirli alanlara (sınıflara) erişmenizi sağlar. Öğrenci olsanız bile (kimlik doğrulaması yapılmış), öğretmenler odasına veya kütüphanenin kısıtlı bölümüne girmenize izin verilmez.


Kimlik Doğrulama ile Yetkilendirme arasındaki fark, "Sen kimsin?" diye sormak gibidir. vs "Ne yapmanıza izin veriliyor?"

Yetkilendirme için neden bir RBAC modeline ihtiyacımız var 🤔?

Yetkilendirme, bireylerin yapmaya yetkili olmadıkları eylemleri gerçekleştirmelerini engellediği için her kuruluşta önemlidir. Bu, kuruluşun güvenliğini sağlar ve kayıpların önlenmesine yardımcı olur.


Yukarıdaki açıklamayı bir örnekle açıklayalım:

Bir şirkette, derin deneyime sahip bazı kıdemli mühendisler ve bazı stajyerler hala işin nasıl yapılacağını öğrenmeye devam ediyor. Hem kıdemli mühendisin hem de stajyerin aynı düzeyde izinlere sahip olmasının yol açacağı felaketi tahmin edebilirsiniz. Hâlâ öğrenmeye devam eden stajyerler farkında olmadan şirketin bedelini ödemek zorunda kalacağı bir hata yapabilir. Bu gibi durumlarda Rol Tabanlı Erişim Kontrol Modeli en iyi şekilde çalışır çünkü izinler kişilere atanmaz, bunun yerine izinler rollere atanır. Örneğin, yalnızca kıdemli bir mühendis veya teknoloji lideri Kaynakları Silebilirken tüm stajyerler yalnızca kaynakları görüntüleyebilir ve yönetebilir.


Şimdi RBAC'ı bir uygulamada nasıl uygulayabileceğimizi görelim.

Bir uygulamada RBAC nasıl uygulanır:

1. Rolleri ve İzinleri Tanımlayın

Öncelikle rolleri tanımlamamız ve her role izin atamamız gerekiyor.

Not: Rol, bir kişinin bir kuruluşta sahip olduğu konum veya amaçtır; o role atanan izinlere veya ayrıcalıklara göre bireyleri ayırt edebilmemiz için rollere ihtiyacımız var.

2. Kullanıcılara Roller Atayın

Uygulamanın her kullanıcısına bir rol atamanın bir yoluna ihtiyacımız var. Bu genellikle kullanıcı kaydolduktan sonra yapılır.

3. Yetkilendirme API'si oluşturun

Arka ucumuzda, kullanıcının gerçekleştirmek istediği işlemi üstlenen ve kullanıcının yetkilerini kontrol eden bir API'ye ihtiyacımız var. Aşağıdaki şema daha iyi anlamanızı sağlayacaktır:



Ancak modelin tamamını sıfırdan hayata geçirmeyeceğiz. Bunun yerine, yetkilendirme oluşturma sürecini bizim için çok sorunsuz ve verimli hale getirecek, böylece gerçekten önemli olan özellikler üzerinde çalışabilmenizi sağlayacak olan İzin adlı üçüncü taraf yetkilendirme aracını kullanacağız.


Aşağıdaki şema, uygulamalarımızda RBAC'yi uygulamak için İzin'den nasıl yararlanacağımızı göstermektedir:


RBAC modelinin uygulanması

Bu bölümde, İzin kullanarak Rol Tabanlı Erişim Denetimini (RBAC) uygulamaya yönelik adımları inceleyeceğiz.


1. Adım: İzin Hesabı ve Çalışma Alanı Oluşturun

RBAC modeli oluşturmak için Permit kullandığımızdan, öncelikle bir Permit hesabı ve çalışma alanı oluşturmamız gerekiyor:


2. Adım: Kaynak Oluşturun

Şimdi uygulamamızda erişimi kontrol etmek istediğimiz varlık olan bir Kaynak oluşturmamız gerekiyor.

Örneğin, bir not alma uygulamasında kaynak Notlar olabilir ve eylemler Oluştur , Oku, Güncelle ve Sil olabilir.


Kaynak oluşturmak için:

  1. Politika bölümüne gidin.
  2. Kaynaklar sekmesine gidin.
  3. Gerekli ayrıntıları doldurarak yeni bir kaynak oluşturun.



Yukarıdaki örnekte Kaynak adı Notes'tur ve kullanıcının gerçekleştirmesine izin verilen eylemler Oluştur, Oku, Güncelle ve Sil'dir.

3. Adım: Rolleri Tanımlayın

Kaynağı oluşturduktan sonra uygulamamızda yer alacak rolleri tanımlamamız gerekiyor.


Bu durumda uygulama bir üniversiteye ait not paylaşım uygulaması olduğundan roller şöyle olacaktır:

  • Yönetici: kaynakları oluşturabilir ve okuyabilir.
  • Öğrenci: Kaynakları okuyabilir.




4. Adım: Eylemleri Rollere Atayın

Her iki rolü de oluşturduktan sonra, şimdi her rolün gerçekleştirebileceği eylemleri politika düzenleyicimizden aşağıda gösterildiği gibi atamamız gerekiyor:


5. Adım: Arka Uç API'lerini yapılandırın

Artık Permit hesabınız yapılandırıldığına göre, Permit ile iletişim kurmak için arka uç API'lerini oluşturmaya başlayabilirsiniz. Permit tarafından sağlanan Node.js SDK'sını kullanacağız. Tercih ettiğiniz programlama dilinin SDK'sını İzin Belgelerinde bulabilirsiniz.


Kullanıcıları Senkronize Et ve Varsayılan Rolü Ata

Öncelikle, uygulamamıza kaydolan her kullanıcıya izin dizini ile senkronize edildiğinden ve varsayılan olarak Öğrenci rolü atandığından emin olmamız gerekir.


Bunu yapmak için aşağıda gösterildiği gibi bir arka uç API oluşturmamız gerekir:

Bu API 2 şey yapar:

  • İzin API'sini başlatır.
  • createUser API'sini kullanarak yeni bir kullanıcı oluşturur.
  • assignRole API'sini kullanarak varsayılan bir rol atar.



Permit'in sağladığı tüm API'ler hakkında daha fazla bilgiyi izin belgelerinde okuyabilirsiniz


Kullanıcı Rolünü Alın

Daha sonra, kullanıcının rolünü Permit.io'dan alan ve onu ön uca geri gönderen bir arka uç API oluşturmamız gerekiyor.

Aşağıda gösterilen API, kullanıcının permit.api.users.get(user_key) i kullanmasını sağlar.



Bu API, yalnızca özel rollere sahip kişilerin görebilmesine izin vermek için ön uç bileşenlerimizi değiştirebileceğimiz kullanıcı rolünü alır.


Belirli bir role sahip bir kullanıcının bir işlemi gerçekleştirmesine izin verilip verilmediğini doğrulamak için izin.check() işlevine de göz atabilirsiniz.

Bununla, Permit'i kullanarak bir RBAC modelini başarıyla uyguladık. Artık kurulumu tamamlamak için arka uç rotalarını seçtiğiniz ön uç çerçevesi veya kitaplığıyla entegre edebiliriz.

Erişim Onay Sisteminin Uygulanması:

Kurulumumuzu tamamlamak için kullanıcıların rol yükseltmeleri istemesine olanak tanıyan bir bileşene ihtiyacımız var:

  • Yönetici ayrıcalıklarına sahip olmayan normal bir kullanıcı, izin öğesini görüntüleyebilir ve yönetici ayrıcalıkları isteyebilir.



  • Yönetici kullanıcı, diğer kullanıcılardan gelen rol yükseltme isteklerini onaylayabilir veya reddedebilir.


1. Adım: İzin Öğesi Oluşturun

İzin Öğeleri, uygulamalarda erişim paylaşımını kolaylaştıran, önceden oluşturulmuş, yerleştirilebilir kullanıcı arayüzü bileşenlerinden oluşan bir paket olan "İzin Ver-Paylaş"ın bir parçasıdır. Tamamen işlevsel erişim kontrolü sağlayacak şekilde tasarlanan bu cihazlar, izin yönetimini kullanıcılarınıza devretmeyi basit ve güvenli hale getirir.


  • Bunu uygulamak için öncelikle bir izin öğesi oluşturmamız gerekir:
    • İzin Kontrol Panelindeki Öğeler sekmesine gidin.
    • Kullanıcı Yönetimi bölümünün altındaki Öğe Oluştur'a tıklayın.



  • Daha sonra formu aşağıda gösterildiği gibi gerekli bilgilerle doldurmalıyız.
    • Yönetici rolünü çalışma alanının sahibi yapın.
    • Öğrenci rolünü izleyici bölümüne atayın.
    • Varsayılan rolü Öğrenci olarak ayarlayın.



  • Öğeyi kaydedin ve Erişim İsteği altında yeni bir öğe oluşturun.:


  • Daha sonra Erişim Talebi Bilgilerini doldurun
    • Erişim isteği öğenizi bağlamak için Kullanıcı Yönetimi Öğesini seçin.
    • Öğeyi sonlandırmak için Oluştur'a tıklayın.



  • Daha sonra Kullanıcı Yönetimi Öğesini düzenleyeceğiz
    • Kullanıcı Yönetimi Öğesine geri dönün ve düzenleyin.
    • Kullanıcı yönetiminde onay bileşeni olarak erişim isteği öğesini seçin.



Elementleri işte bu kadar yarattık.

2. Adım: Kullanıcı Girişi için Arka Uç API'si oluşturun

Elemanları kullanmadan önce, izin elemanına kullanıcının giriş yapması için bir arka uç API oluşturmamız gerekiyor,

Not: Kullanıcının mümkün olduğu kadar erken, tercihen kaydolduktan hemen sonra oturum açması önemlidir.


Şimdi koda bakalım:

/api/v1/login_permit/?userkey=user_key noktasında hizmet veren API kodu:



Adım 3: Oturum Açmayı Uygulamak için Ön Uç Kodu

Oturum açmayı uygulamaya yönelik ön uç kodu şöyle görünecektir:



Kodumuzu bu kadar oluşturduk.

4. Adım: Iframe'leri Ön Uç'a entegre edin

Şimdi izin kontrol paneline gitmemiz ve aşağıda gösterildiği gibi hem kullanıcı yönetimi iframe'ini hem de erişim isteği iframe'ini kopyalamamız gerekiyor:



Şimdi kodu aldıktan sonra, öğeleri kullanıcılarımıza göstermek istediğimiz yere iframe ön uçumuza eklememiz gerekiyor, şunları yapmamız gerekiyor:

  • Kullanıcı yönetimi öğesini yönetici rolüne sahip kullanıcılara gösterin.
  • Erişim isteği öğesini öğrenci rolüne sahip kullanıcılara gösterin.


Bununla, kullanıcıların rol yükseltmeleri talep edebildiği ve yöneticilerin bu istekleri onaylayabildiği veya reddedebildiği bir erişim onay sistemini başarıyla kurduk.


Not paylaşım uygulamasında RBAC demosu

  • Demo: Yükleme Widget'ına Yönetici Erişimi

Bu demo, "Yönetici" rolüne sahip bir kullanıcının yükleme widget'ına nasıl erişebileceğini gösterir



  • Demo: Öğrenci Rolü Kısıtlamaları ve Erişim Talebi

Bu demo, "Öğrenci" rolüne sahip bir kullanıcının yükleme widget'ını nasıl göremediğini ve "Yönetici" rolüne yükseltme talebinde bulunabildiğini gösterir:


  • Demo: Rol Yükseltmeyi Onaylama

Bu demo, ayrıcalıklı kullanıcıların rol yükseltme isteklerini nasıl onaylayabileceklerini gösterir:


  • Demo: Yükleme Widget'ına Yükseltilmiş Rol Erişimi

Bu demo, bir kullanıcının "Öğrenci"den "Yönetici"ye yükseltildikten sonra yükleme widget'ına nasıl erişim kazandığını gösterir

Çözüm

Bu kadar!


Buraya kadar okuduğunuz için teşekkür ederim.


Bu eğitimde yetkilendirmeyi araştırdık ve herhangi bir uygulamada yetkilendirmenin neden çok önemli olduğunu anladık. Ayrıca uygulamanın güvenliğini sağlamak ve kullanıcı erişimini rollerine göre kontrol etmek için İzin'i nasıl kurup yapılandırabileceğimize de baktık.


Bu makale yetkilendirme buzdağının ve RBAC modelinin sadece görünen kısmıdır. Daha ayrıntılı Yetkilendirme için ABAC ve ReBAC'a bakabilirsiniz.