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 Katman | Tip | Yazar | Açıklama |
---|---|---|---|
react-authz | React | Casbin | Casbin.js için React sarmalayıcı |
rbac-react | React | @daobeng | React'ta Rol Tabanlı Erişim Kontrolü HOC'ler, CASL ve Casbin.js Kullanarak |
vue-authz | Vue | Casbin | Casbin.js için Vue sarmalayıcısı |
angular-authz | Angular | Casbin | Casbin.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:
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()
}
Ş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:
- 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.
- Tüm politikaları istemci tarafına yüklemek güvenlik riskleri doğurabilir.
- İ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.