Ana içeriğe atla

Frontend Usage

Casbin.js, frontend uygulamanızdaki erişim-kontrol yönetiminizi kolaylaştıran bir Casbin eklentisidir.

Kurulum

npm install casbin.js
npm install casbin

veya

yarn add casbin.js

Ön Uç Ara Katmanlar

Ara KatmanTipYazarAçıklama
react-authzReactCasbinCasbin.js için React sarmalayıcı
rbac-reactReact@daobengReact'ta Rol Tabanlı Erişim Kontrolü HOC'ler, CASL ve Casbin.js Kullanarak
vue-authzVueCasbinCasbin.js için Vue sarmalayıcısı
angular-authzAngularCasbinCasbin.js için Angular sarmalayıcısı

Hızlı Başlangıç

Ön uygulamanızda manual modunu kullanabilir ve istediğiniz zaman izinleri ayarlayabilirsiniz.

const casbinjs = require("casbin.js");
// Set the user's permission:
// He/She can read `data1` and `data2` objects and can write `data1` object
const permission = {
"read": ["data1", "data2"],
"write": ["data1"]
}

// Run casbin.js in manual mode, which requires you to set the permission manually.
const authorizer = new casbinjs.Authorizer("manual");

Şimdi bir yetkilendiriciye sahibiz, authorizer. İzin kurallarını authorizer.can() ve authorizer.cannot() API'lerini kullanarak alabiliriz. Bu 2 API'nin dönüş değerleri JavaScript Promiseleridir (detaylar burada), bu yüzden dönüş değerinin then() metodunu şu şekilde kullanmalıyız:

result = authorizer.can("write", "data1");
result.then((success, failed) => {
if (success) {
console.log("you can write data1");
} else {
console.log("you cannot write data1");
}
});
// output: you can write data1

cannot() API'si de aynı şekilde kullanılır:

result = authorizer.cannot("read", "data2");
result.then((success, failed) => {
if (success) {
console.log("you cannot read data2");
} else {
console.log("you can read data2");
}
});
// output: you can read data2

Yukarıdaki kodda, parametrelerdeki success değişkeni, isteğin hata fırlatmadan sonuç aldığı anlamına gelir ve izin kuralının true olduğu anlamına gelmez. failed değişkeni de izin kurallarıyla ilgili değildir. Yalnızca istek sürecinde bir şey ters giderse anlamlı olur.

Casbin.js'in pratik bir kullanımını görmek için React örneğimize başvurabilirsiniz.

İzin Nesnesi

Casbin.js, ziyaretçinin ilgili izinlerini manipüle etmek için bir JSON nesnesi kabul edecektir. Örneğin:

{
"read": ["data1", "data2"],
"write": ["data1"]
}

Yukarıdaki izin nesnesi, ziyaretçinin data1 ve data2 nesnelerini okuyabileceğini, ancak sadece data1 nesnelerini yazabileceğini gösterir.

Gelişmiş Kullanım

Casbin.js, frontend erişim-kontrol yönetiminizi backend Casbin servisinizle entegre etmek için mükemmel bir çözüm sunar.

Casbin.js Authorizer'ı başlatırken auto modunu kullanın ve uç noktanızı belirtin, bu sayede izinler otomatik olarak senkronize edilir ve frontend durumu manipüle edilir.

const casbinjs = require('casbin.js');

// Set your backend Casbin service URL
const authorizer = new casbinjs.Authorizer(
'auto', // mode
{endpoint: 'http://your_endpoint/api/casbin'}
);

// Set your visitor.
// Casbin.js will automatically sync the permission with your backend Casbin service.
authorizer.setUser("Tom");

// Evaluate the permission
result = authorizer.can("read", "data1");
result.then((success, failed) => {
if (success) {
// Some frontend procedure ...
}
});

Buna karşılık, bir izin nesnesi oluşturmak ve bunu frontend'e iletmek için bir arayüz (ör. bir RestAPI) açmanız gerekir. API kontrolörünüzde, izin nesnesini oluşturmak için CasbinJsGetUserPermission çağrısı yapın. İşte Beego'da bir örnek:

not

Uç nokta sunucunuz şuna benzer bir şey döndürmelidir:

{
"other":"other",
"data": "What you get from `CasbinJsGetPermissionForUser`"
}
// Router
beego.Router("api/casbin", &controllers.APIController{}, "GET:GetFrontendPermission")

// Controller
func (c *APIController) GetFrontendPermission() {
// Get the visitor from the GET parameters. (The key is "casbin_subject")
visitor := c.Input().Get("casbin_subject")
// `e` is an initialized instance of Casbin Enforcer
c.Data["perm"] = casbin.CasbinJsGetPermissionForUser(e, visitor)
// Pass the data to the frontend.
c.ServeJSON()
}
not

Şu anda, CasbinJsGetPermissionForUser API'si sadece Go Casbin ve Node-Casbin'de desteklenmektedir. Eğer bu API'nin diğer dillere de desteklenmesini istiyorsanız, lütfen bir sorun bildirin veya aşağıya yorum bırakın.

API Listesi

setPermission(permission: string)

İzin nesnesini ayarlayın. Her zaman manuel modda kullanılır.

setUser(user: string)

Ziyaretçi kimliğini ayarlayın ve izni güncelleyin. Her zaman otomatik modda kullanılır.

can(action: string, object: string)

Kullanıcının action işlemini object üzerinde gerçekleştirebilip gerçekleştiremeyeceğini kontrol edin.

cannot(action: string, object: string)

Kullanıcının action işlemini object üzerinde gerçekleştiremeyeceğini kontrol edin.

canAll(action: string, objects: Array<object>)

Kullanıcının action işlemini objects içindeki tüm nesneler üzerinde gerçekleştirebilip gerçekleştiremeyeceğini kontrol edin.

canAny(action: string, objects: Array<object>)

Kullanıcının action işlemini objects içindeki herhangi bir nesne üzerinde gerçekleştirebilip gerçekleştiremeyeceğini kontrol edin.

Neden Casbin.js?

İnsanlar Node-Casbin ile Casbin.js arasındaki farkı merak edebilirler. Kısaca, Node-Casbin, Casbin'in NodeJS ortamında uygulanan çekirdeğidir ve normalde sunucu uçlarında erişim kontrol yönetim aracı olarak kullanılır. Casbin.js, Casbin'i kullanarak web sayfası kullanıcılarınızı istemci tarafında yetkilendirmenize yardımcı olan bir ön uç kütüphanesidir.

Normalde, aşağıdaki sorunlar nedeniyle doğrudan bir Casbin hizmeti oluşturup yetkilendirme/uygulama görevlerini bir web ön uç uygulamasında yapmak uygun değildir:

  1. Birisi istemciyi açtığında, uygulayıcı başlatılır ve tüm politikaları arka uç kalıcı katmanlardan çeker. Yüksek eşzamanlılık, veritabanlarına zorlu baskı getirebilir ve çok fazla ağ işlem hacmi maliyeti doğurabilir.
  2. Tüm politikaları istemci tarafına yüklemek güvenlik riskleri doğurabilir.
  3. İstemciyi ve sunucuyu ayırmak ve çevik geliştirmeyi kolaylaştırmak zordur.

Ön uçta Casbin kullanma sürecini kolaylaştıran bir araç gerekiyor. Aslında, Casbin.js'nin çekirdeği, istemci tarafında mevcut kullanıcının izinlerinin manipülasyonudur. Dediğiniz gibi, Casbin.js belirtilen bir uç noktadan fetch işlemi yapar. Bu prosedür, kullanıcının izinlerini arka uç Casbin hizmetiyle senkronize edecektir. İzin veri elde ettikten sonra, geliştiriciler Casbin.js arayüzlerini kullanarak kullanıcının ön uç taraftaki davranışını yönetebilir.

Casbin.js yukarıda belirtilen iki sorunu da önler: Casbin hizmeti artık sürekli olarak çağrılmayacak ve istemci ile sunucu arasında geçirilen mesajların boyutu azaltılacak. Ayrıca tüm politikaları ön uçta saklamamayı da önleyebiliriz. Kullanıcı sadece kendi izinlerine erişebilir, ancak erişim-kontrol modeli ve diğer kullanıcıların izinleri hakkında bilgi sahibi olamaz. Ayrıca, Casbin.js yetkilendirme yönetiminde istemci ve sunucuyu etkin bir şekilde ayırmanın yanı sıra.