Türkçe
  • ciam
  • auth
  • authentication

Logto'da RBAC'i Anlama: Kapsamlı Bir Gerçek Dünya Örneği

Bu makale, bir online kitapçı örneğini kullanarak anahtar kullanıcı rollerini, kapsamları ve Logto'nun RBAC özelliklerini frontend ve backend uygulamalarında daha iyi güvenlik ve erişim kontrolü için asıl entegre edeceğinizi keşfedeceğimiz Logto'da Rol Tabanlı Erişim Kontrolünü (RBAC) anlama konusunda kapsamlı bir rehber sunar.

Sijie
Sijie
Developer

Giriş

Erişim kontrolü ve güvenlik, kullanıcıların kaynaklara uygun erişimi olduğundan emin olmak için modern uygulamaların vazgeçilmez yönleridir. Logto'nun Rol Tabanlı Erişim Kontrolü (RBAC), geliştiricilere uygulamalarındaki erişim kontrolünü ve güvenliği yönetme konusunda verimli bir yol sunar. Bu makalede, bir gerçek dünya örneği kullanarak Logto'nun RBAC uygulamasının güçlü özelliklerini keşfedeceğiz, size bu kavramları anlama ve projelerinize uygulama konusunda yardımcı olacağız.

Hem frontend hem de backend kod parçalarını inceleyerek, Logto'nun RBAC'ini uygulama yığınına asıl entegre edeceğiniz hakkında kapsamlı bir bakış açısı kazanacaksınız. Bu makalenin sonunda, projenizin güvenliğini ve erişim kontrolünü artırmak için Logto'nun RBAC özelliklerini kullanma konusunda tamamen donanımlı hale geleceksiniz.

BookHarber'ı Tanıtma: Online bir kitapçı kullanım durumu

Logto'nun RBAC özelliklerini etkin bir şekilde göstermek için, gerçek bir dünya örneği kullanacağız: BookHarber, bir online kitapçı. BookHarber, müşterilere ve personel için geniş bir özellik yelpazesi sunarak sorunsuz ve güvenli bir alışveriş deneyimi sağlar.

BookHarber'ın anahtar özellikleri şunlardır:

  1. Kitapları Göz Atma ve Satın Alma: Kullanıcılar, çeşitli türler ve yazarları kapsayan çeşitli bir koleksiyondan kitap arayabilir ve satın alabilirler.
  2. Sipariş Yönetimi ve Lojistik İzleme: Kayıtlı müşteriler, siparişlerini yönetebilir, kargoyu izleyebilir ve satın almaları hakkında güncellemeler alabilirler.
  3. Özel Teklifler ve Tatil Etkinlikleri: BookHarber, müşteri tabanını katılıma teşvik etmek ve ödüllendirmek için özel etkinlikler ve tatiller boyunca özel indirimler ve promosyonlar sunar.
  4. Müşteri Hizmetleri: Müşteriler, karşılaştıkları her türlü sorun veya sorunu çözmek için destek talebi açabilirler, BookHarber personeli tarafından hızlı yardım alabilirler.
  5. Müşteri Yönetimi: Farklı rollerdeki personel üyeleri, platformun çeşitli yönlerini yönetme yeteneğine sahiptir, örneğin müşteri hesapları, sipariş işleme ve sorun çözme.

Roller

BookHarber ekosistemi içinde, şunlar gibi birkaç anahtar kullanıcı rolünü belirleyebiliriz:

  1. Misafir: Web sitesini göz atabilir, kitap arayabilir ve özel teklifleri görüntüleyebilen kayıtlı olmayan kullanıcılar.
  2. Müşteri: Kitap satın alabilen, siparişleri yönetebilen, lojistiği izleyebilen ve destek talebinde bulunabilen kayıtlı kullanıcılar.
  3. Mağaza Yöneticisi: Platformun genel yönetimi ve operasyonlarından sorumlu personel üyeleri. Tam erişime sahiptirler.
  4. Kitap Yöneticisi: Kitap ve kategori yönetiminden sorumlu personel üyeleri.
  5. Müşteri Hizmetleri Temsilcisi: Destek taleplerine yanıt verme görevi olan personel üyeleri.
  6. Üçüncü taraf Lojistik Sağlayıcısı: Siparişlerin gönderimi ve teslimatını yönetmek ve takip etmek için sorumlu dış ortaklar.
  7. Pazarlama Personeli: BookHarber'ı tanıtmak için sorumlu olan personel üyeleri, özel tekliflerin ve etkinliklerin yönetiminden sorumludurlar.

BookHarber REST API'ları için kapsamları tasarlama

Logto'nun RBAC sistemini BookHarber için etkin bir şekilde uygulayabilmek için, çeşitli REST API'lerine karşılık gelen kapsamları tasarlamamız gerekiyor. Kapsamlar, belirli bir rolün her API uç oktası için erişim düzeyini tanımlayan izinlerdir. Uygun kapsamları her kullanıcı rolüne atayarak, kullanıcıların yalnızca rolüne ait eylemlere ve kaynaklara erişimine olanak sağlarız.

Aşağıdaki REST API'leri için kapsamları tasarlayalım:

  1. Kategoriler API:
    • create:categories: POST /categories
    • write:categories: PUT /categories/:id
    • delete:categories: DELETE /categories/:id
    • list:categories: GET /categories
  2. Books API:
    • create:books: POST /books
    • write:books: PUT /books/:id
    • delete:books: DELETE /books/:id
    • list:books: GET /books
    • read:books: GET /books/:id
  3. Customers API:
    • list:customers: GET /customers
    • write:customers: PUT /customers/:id
    • delete:customers: DELETE /customers/:id
    • read:customers: GET /customers/:id
  4. Orders API:
    • create:orders: POST /orders
    • list:orders: GET /orders
    • read:orders: GET /orders/:id
    • write:orders: PUT /orders/:id
  5. Events API:
    • create:events: POST /events
    • write:events: PUT /events/:id
    • list:events: GET /events
    • delete:events: DELETE /events/:id
  6. Order Tracks API:
    • read:orderTracks: GET /orders/:id/tracks
    • create:orderTracks: POST /orders/:id/tracks
    • write:orderTracks: PUT /orders/:id/tracks/:trackId
  7. Tickets API:
    • create:tickets: POST /tickets
    • list:tickets: GET /tickets
    • read:tickets: GET /tickets/:id
    • write:tickets: PUT /tickets/:id

Scopes'ları Rollere Atama

Her REST API için uygun kapsamları tanımladığımıza göre, bu kapsamları BookHarber ekosistemi içindeki ilgili kullanıcı rollere atayabiliriz:

KapsamlarMisafirMüşteriMağaza YöneticisiKitap YöneticisiMüşteri Hizmetleri TemsilcisiÜçüncü Taraf Lojistik SağlayıcısıPazarlama Personeli
create:categories
write:categories
delete:categories
list:categories
create:books
write:books
delete:books
list:books
read:books
list:customers
write:customers
delete:customers
read:customers
create:orders
list:orders
read:orders
write:orders
create:events
write:events
list:events
delete:events
read:orderTracks
create:orderTracks
write:orderTracks
create:tickets
list:tickets
read:tickets
write:tickets

"list" ve "read" kapsamları arasındaki farkları anlama

REST API tasarımı ve RBAC bağlamında "list" ve "read" kapsamları arasındaki farkları daha ayrıntılı açıklamak için, bir online kitapçı, BookHarber ile ilgili gerçek dünya örneğini düşünelim.

Diyelim ki BookHarber'ın iki tip kullanıcısı var: müşteriler ve müşteri hizmetleri temsilcileri. Müşteriler sipariş oluşturabilirken, müşteri hizmetleri temsilcileri müşterilere siparişleriyle yardımcı olmakla sorumludur. Bu senaryoda orders API kaynağına "list" ve "read" kapsamları asıl uygulanır, bir bakalım.

  1. List Scopes: Bir "list" kapsamı, kullanıcının sistemindeki bir dizi varlığa erişimine izin verir. Örnek olarak, list:orders kapsamı, bir kullanıcının tüm mevcut siparişlerin bir listesini almasına olanak sağlar. BookHarber bağlamında, bu kapsam, sistemdeki tüm siparişlere genel bir bakışa ihtiyaç duyan mağaza yöneticileri veya diğer personel üyeleri için yararlı olabilir. Ancak, müşteri hizmetleri temsilcileri, rolünün özgül siparişleriyle bireysel müşterilere yardımcı olması edeniyle, tüm siparişlerin tam listesine erişebilmemelidir.
  2. Read Scopes: Bir "read" kapsamı, kullanıcıya belirli bir kimlikle tek bir varlığa erişme izni verir. Örneğin, read:orders kapsamı, kullanıcının kimliğiyle belirli bir sipariş hakkında ayrıntılı bilgileri görüntülemesine izin verir. BookHarber'ın durumunda, bu kapsam, belirli bir müşterinin siparişi hakkında bilgiye erişmeye ihtiyaç duyan müşteri hizmetleri temsilcileri için idealdir. Bir müşteri destek talebinde bulunduğunda, müşteri hizmetleri temsilcisi talepte verilen sipariş kimliğini kullanarak o belirli siparişin detaylarına erişebilir ve görüntüleyebilir.

Sahipliği Anlama: Müşterilerin kendi siparişleri için "read" veya "list" kapsamlarına ihtiyaçları

eden yoktur

Birçok uygulamada, kullanıcıların kendi kaynaklarına, karşılık gelen "read" veya "list" kapsamlarını açıkça vermeden erişim sahibi olması yaygındır. Bu, kullanıcıların bu kaynakların sahibi olarak kabul edilmesi ve doğal olarak onlara erişim sağlaması edeniyledir. BookHarber örneğimizde, müşteriler sipariş oluşturabilir ancak "read:orders" veya "list:orders" kapsamlarına sahip değillerdir.

Sahiplik kavramı, bir REST API'deki belirli kaynaklar için erişim kontrolünü tanımlama konusunda kritik bir rol oynar. Kullanıcıların her zaman kendi kaynaklarına erişebileceğini kabul ederek, kullanışlı ve güvenli erişim kontrolünü gereksiz izinleri vermeden daha verimli bir şekilde uygulayabiliriz. BookHarber'ın durumunda, bu, müşterilerin ek kapsamlara ihtiyaç duymadan hala siparişlerini görüntüleyebilecekleri ve yönetebilecekleri anlamına gelir.

Bunu asıl çalıştığına dair bir örnekle göstermek için, GET /orders uç oktasını düşünelim:

  1. Bir kullanıcının list:orders kapsamı varsa (örneğin, mağaza yöneticileri veya personel üyeleri), sistemdeki tüm siparişleri görebilirler. Bu, onların rolü için gerekli sipariş verilerine genel bir bakış sağlar.
  2. Bir kullanıcının list:orders kapsamı yoksa (örneğin, düzenli müşteriler), sistem yalnızca kullanıcıya ait siparişleri döndürecektir. Bu, müşterilerin gerekli olmayan izinler verilmeden hala sipariş bilgilerine erişebilmesini sağlar.

Bu sahiplik bazlı erişim kontrolünü uygulayarak, API farklı kullanıcı rollerine güvenliği ve özel bir kullanıcı deneyimini koruyarak uygun erişim düzeyi sağlayabilir. BookHarber'ın durumunda, sahiplik modeli, "read:orders" veya "list:orders" kapsamlarına ihtiyaç duymadan müşterilerin sipariş bilgilerine erişmelerine izin verir, erişim kontrol tasarımını basitleştirir ve genel kullanıcı deneyimini geliştirir.

Logto Konsolu'nda ayarları yapılandırma

Logto'nun Konsolu'nda yapılandırmayı tamamlamak için şu adımları izleyin:

  1. React için Tek Sayfalık Bir Uygulama (SPA) Oluşturun: React uygulamanız için Logto Konsolu'nda bir SPA kurun.
  2. API Kaynağı Oluşturun: https://api.bookharber.com tanımlayıcısıyla yeni bir API Kaynağı ekleyin.
  3. Kaynak için Kapsamları Tanımlayın: Yeni oluşturulan API Kaynağı altında gerekli kapsamları oluşturun.
  4. Rolleri Oluşturun ve Kapsamları Atayın: Uygulamanız için kullanıcı rollerini tanımlayın ve her role uygun kapsamları atayın.
  5. Kullanıcılara Roller Atayın: Uygulamanızdaki kullanıcılara ilgili rolleri atayın, her kullanıcının (Özellikle personel üyesi) rollerine dayalı olarak doğru izinlere sahip olduğundan emin olun.

Kapsamları kullanarak API'yi koruma

Örneğimizdeki proje, BookHarber'da, backend hizmeti için Express ve frontend web sayfası için React kullanıyoruz. Bu bölüm, uygulamamızı güvence altına almak için bu popüler teknolojilere Logto'nun RBAC özelliklerini asıl entegre edeceğimiz hakkında kısaca bilgi verecektir.

Tam belge: https://docs.logto.io/docs/recipes/rbac/protect-resource

Frontend

React uygulamanızda Logto'yu başlatmak için buradaki belgelendirmeyi takip edin: https://docs.logto.io/docs/recipes/integrate-logto/react/

Temel kurulumun yanı sıra, "resource" ve "scopes"ı yapılandırmada belirtmeniz gerekecektir:

İşte Logto kullanarak bir API isteği yapma örneği:

Backend

API'yi korumak için, şu linki takip edin: https://docs.logto.io/docs/recipes/protect-your-api/

Örnek kodun yanı sıra (https://docs.logto.io/docs/recipes/protect-your-api/node), kapsam doğrulamasını da eklememiz gerekiyor:

Sonuç

Logto'nun RBAC sistemi, modern uygulamalarda erişim kontrolünü ve güvenliği yönetmek için güçlü bir araçtır. Logto'nun RBAC özelliklerinden yararlanarak, kullanıcıların rollerine göre kaynaklara uygun erişime sahip olmalarını sağlayabilir, hassas veri ve işlevselliği izinsiz erişimden koruyabilirsiniz.

Bu makalede, bir online kitapçı, BookHarber'ın gerçek dünya örneğini inceledik ve kapsamları asıl tasarlayacağınızı, onları kullanıcı rollerine asıl atayacağınızı ve Logto'nun RBAC özelliklerini hem uygulama frontendi hem de backendi üzerinde asıl uygulayacağınızı gösterdik.

Bu kavramları ve teknikleri projelerinize uygulayarak, uygulamalarınızın güvenlik ve erişim kontrolünü güçlendirebilir, sorunsuz ve güvenli bir kullanıcı deneyimi sunabilirsiniz. Bir e-ticaret platformu, bir içerik yönetim sistemi veya rol tabanlı erişim kontrolünü gerektiren başka bir proje üzerinde çalışıyor olun, Logto'nun RBAC sistemi, erişim kontrolü ihtiyaçlarınızı karşılamak için esnek ve verimli bir çözüm sunar.