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.
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:
- 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.
- 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.
- Ö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.
- 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.
- 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:
- Misafir: Web sitesini göz atabilir, kitap arayabilir ve özel teklifleri görüntüleyebilen kayıtlı olmayan kullanıcılar.
- Müşteri: Kitap satın alabilen, siparişleri yönetebilen, lojistiği izleyebilen ve destek talebinde bulunabilen kayıtlı kullanıcılar.
- Mağaza Yöneticisi: Platformun genel yönetimi ve operasyonlarından sorumlu personel üyeleri. Tam erişime sahiptirler.
- Kitap Yöneticisi: Kitap ve kategori yönetiminden sorumlu personel üyeleri.
- Müşteri Hizmetleri Temsilcisi: Destek taleplerine yanıt verme görevi olan personel üyeleri.
- Üçüncü taraf Lojistik Sağlayıcısı: Siparişlerin gönderimi ve teslimatını yönetmek ve takip etmek için sorumlu dış ortaklar.
- 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:
- Kategoriler API:
create:categories
: POST /categorieswrite:categories
: PUT /categories/:iddelete:categories
: DELETE /categories/:idlist:categories
: GET /categories
- Books API:
create:books
: POST /bookswrite:books
: PUT /books/:iddelete:books
: DELETE /books/:idlist:books
: GET /booksread:books
: GET /books/:id
- Customers API:
list:customers
: GET /customerswrite:customers
: PUT /customers/:iddelete:customers
: DELETE /customers/:idread:customers
: GET /customers/:id
- Orders API:
create:orders
: POST /orderslist:orders
: GET /ordersread:orders
: GET /orders/:idwrite:orders
: PUT /orders/:id
- Events API:
create:events
: POST /eventswrite:events
: PUT /events/:idlist:events
: GET /eventsdelete:events
: DELETE /events/:id
- Order Tracks API:
read:orderTracks
: GET /orders/:id/trackscreate:orderTracks
: POST /orders/:id/trackswrite:orderTracks
: PUT /orders/:id/tracks/:trackId
- Tickets API:
create:tickets
: POST /ticketslist:tickets
: GET /ticketsread:tickets
: GET /tickets/:idwrite: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:
Kapsamlar | Misafir | Müşteri | Mağaza Yöneticisi | Kitap Yöneticisi | Müş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.
- 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. - 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:
- 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. - 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:
- React için Tek Sayfalık Bir Uygulama (SPA) Oluşturun: React uygulamanız için Logto Konsolu'nda bir SPA kurun.
- API Kaynağı Oluşturun:
https://api.bookharber.com
tanımlayıcısıyla yeni bir API Kaynağı ekleyin. - Kaynak için Kapsamları Tanımlayın: Yeni oluşturulan API Kaynağı altında gerekli kapsamları oluşturun.
- Rolleri Oluşturun ve Kapsamları Atayın: Uygulamanız için kullanıcı rollerini tanımlayın ve her role uygun kapsamları atayın.
- 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.