Ana içeriğe atla

RBAC with Pattern

Hızlı Başlangıç

  • g(_, _) içinde desen kullanın.

    e, _ := NewEnforcer("./example.conf", "./example.csv")
    e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Deseni alanla kullanın.

    e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Tüm desenleri kullanın.

    Her iki API'nin kullanımını birleştirin.

Yukarıda gösterildiği gibi, enforcer örneğini oluşturduktan sonra, desen eşleştirmeyi AddNamedMatchingFunc ve AddNamedDomainMatchingFunc API'leri aracılığıyla aktive etmeniz gerekir; bunlar desenin nasıl eşleştiğini belirler.

not

Online düzenleyiciyi kullanıyorsanız, desen eşleme işlevini sol alt köşede belirtir. editor-tips

RBAC'ta desen eşlemeyi kullanın

Bazen, belirli konular, nesneler veya alanlar/kiracılar gibi belirli bir desene sahip olanların otomatik olarak bir rol verilmesini istersiniz. RBAC'taki desen eşleme işlevleri bunu yapmanıza yardımcı olabilir. Desen eşleme işlevi, önceki eşleştirici işlevinin aynı parametrelerini ve dönüş değerini paylaşır.

Desen eşleme işlevi, g parametresinin her birini destekler.

Normalde RBAC'ın bir eşleştiricide g(r.sub, p.sub) olarak ifade edildiğini biliyoruz. O zaman şöyle bir politikayı kullanabiliriz:

p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group

Yani alice, kitap 1 ve kitap 2 dahil tüm kitapları okuyabilir. Ancak binlerce kitap olabilir ve her kitabı bir g politikası kuralıyla kitap rolüne (veya grubuna) eklemek çok sıkıcıdır.

Ancak kalıp eşleştirme fonksiyonları ile, politikayı sadece bir satırla yazabilirsiniz:

g, /book/:id, book_group

Casbin sizin için otomatik olarak /book/1 ve /book/2'yi /book/:id kalıbına eşleyecektir. Fonksiyonu sadece şu şekilde enforcer ile kaydetmeniz gerekir:

e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

Etki alanları/kiracılar içinde bir kalıp eşleştirme fonksiyonu kullanırken, fonksiyonu enforcer ve model ile kaydetmeniz gerekir.

e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

Eğer g(r.sub, p.sub, r.dom) ifadesinin ne anlama geldiğini anlamadıysanız, lütfen rbac-with-domains belgelerini okuyun. Kısaca, g(r.sub, p.sub, r.dom) kullanıcının r.sub'nin etki alanı r.dom içinde p.sub rolüne sahip olup olmadığını kontrol edecektir. İşte matcher'ın nasıl çalıştığı bu şekildedir. Tam örneği burada görebilirsiniz.

Yukarıdaki kalıp eşleştirme sözdizimine ek olarak, saf etki alanı kalıbını da kullanabiliriz.

Örneğin, sub farklı alanlarda, domain1 ve domain2'de erişime sahip olmasını istiyorsak, saf alan kalıbını kullanabiliriz:

p, admin, domain1, data1, read
p, admin, domain1, data1, write
p, admin, domain2, data2, read
p, admin, domain2, data2, write

g, alice, admin, *
g, bob, admin, domain2

Bu örnekte, alice'in domain1 ve domain2'de data'yı okuyup yazmasını istiyoruz. g içindeki kalıp eşleştirme *, alice'e iki alanlı erişim sağlar.

Kalıp eşleştirmeyi kullanarak, özellikle daha karmaşık ve çok sayıda alan ya da nesne göz önünde bulundurulması gereken senaryolarda, policy_definition'ı daha zarif ve etkili bir şekilde uygulayabiliriz.