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.
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!
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, 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.
Ö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.
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.
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:
Bu bölümde, İzin kullanarak Rol Tabanlı Erişim Denetimini (RBAC) uygulamaya yönelik adımları inceleyeceğiz.
RBAC modeli oluşturmak için Permit kullandığımızdan, öncelikle bir Permit hesabı ve çalışma alanı oluşturmamız gerekiyor:
Ş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:
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.
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:
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:
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:
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.
Kurulumumuzu tamamlamak için kullanıcıların rol yükseltmeleri istemesine olanak tanıyan bir bileşene ihtiyacımız var:
İ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.
Elementleri işte bu kadar yarattık.
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:
Oturum açmayı uygulamaya yönelik ön uç kodu şöyle görünecektir:
Kodumuzu bu kadar oluşturduk.
Ş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:
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.
Bu demo, "Yönetici" rolüne sahip bir kullanıcının yükleme widget'ına nasıl erişebileceğini gösterir
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:
Bu demo, ayrıcalıklı kullanıcıların rol yükseltme isteklerini nasıl onaylayabileceklerini gösterir:
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
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.