Ben senin bilmediğin bir şey biliyorum: MustBe



  1. Ben senin bilmediğin bir şey biliyorum: MustBe

“Bir şey biliyorum…” serisinin ilk bölümü, Express tabanlı bir web uygulamasına kimlik doğrulama öğretmek için Passport modülünü kullanmakla ilgiliydi. Şimdi başka bir modül bunu yetkilendirmeyi içerecek şekilde genişletmelidir.


Kimlik doğrulama, kullanıcıların kimliğini kanıtlarken, yetkilendirmenin, kullanıcıların belirli kaynaklara veya hizmetlere erişimi olup olmadığına karar vermek için kullanıldığı bilinmektedir. Ancak, kimlik doğrulamada olduğu gibi, Express de yerel olarak yetkilendirme için herhangi bir yol sağlamaz. Bunu başaran bir modül, hafif MustBe’dir.

MustBe üzerinden yetkilendirme


Prensip olarak MustBe, hem Connect hem de Express ile çalışır, böylece MustBe’nin temellerine ek olarak, Express ile entegrasyon aşağıda kısaca sunulmuştur.

Modül, parametre kullanılarak Paket Yöneticisi npm aracılığıyla Node.js için her zamanki gibi kurulur. –Kaydetmek modülün package.json yapılandırma dosyasında doğrudan bir bağımlılık olarak yazıldığından emin olmak:

npm install mustbe --save

Bir sonraki adım, modülü eklemektir. rica etmek() soruya ekle:

var mustBe = require("mustbe");


MustBe yöntemi kullanılarak yapılandırılır yapılandır(). Bu, bir parametre olarak bir yapılandırma nesnesi ile parametre olarak çağrılan bir geri çağırma işlevini bekler. Netlik açısından, bu geri arama işlevini ayrı bir dosyada tanımlamanız ve ayrıca rica etmek() içermek:

var mustBeConfig = require("./mustbe-config");
mustBe.configure(mustBeConfig);

Böyle bir MustBe yapılandırma dosyası için temel çerçeve şöyle görünür:

module.exports = function(config) {
// Konfiguration
};

Bu geri arama işlevi içinde, parametre olarak iletilen artık yapılandırma-Object, isteğinize göre MustBe veya izin ayarlamak için kullanılabilir. Temel olarak, aşağıdaki şeyler tanımlanmıştır:

Kimlik doğrulamayı yapılandırma


Bir geliştirici olarak MustBe, hangi kimlik doğrulama yönteminin kullanılacağını belirtmez, ancak size uygun yöntemi kendiniz seçme ve entegre etme özgürlüğü verir. Bunu yapmanın bir yolu, yöntemi sağlar kullanıcı kimliği() Kullanıcıların kimliklerinin tam olarak ne zaman doğrulanıp ne zaman doğrulanmadığını etkilemek için kullanılabilen, parametre olarak bir kimlik nesnesi alır.

config.userIdentity(function(identity){
identity.isAuthenticated(function(user, callback) {
var isAuthenticated = false;
if (user) {
isAuthenticated = user.isLoggedIn();
}
callback(null, isAuthenticated);
});
});

Prensip olarak burası, örneğin Pasaportun da entegre edilebileceği yer olacaktır.

Yetkilendirilecek faaliyetlerin tanımı


Node ACL gibi diğer yetkilendirme modüllerinden farklı olarak, MustBe’de yetkilendirme gerektiren eylemler doğrudan rollere bağlı değildir, ancak sözde etkinlikler aracılığıyla rollerden ayrıştırılır. MustBe’nin geliştiricisi (modülün piyasaya sürülmesinden yıllar önce) bir blog yazısında kesin arka planı ayrıntılarıyla anlattı.

Görevler, yapılandırma içinde çağrılarak gerçekleştirilir. yapılandırma.aktivite() Tanımlandılar. Örneğin, aşağıdaki kod, etkinliğin öğeler.görünüm yalnızca kimliği doğrulanmış kullanıcılar tarafından çalıştırılabilir.

config.activities(function(activities){
activities.can("items.view", function(identity, params, callback) {
identity.isAuthenticated(function(err, isAuth){
return callback(err, isAuth);
});
});
});

Prensip olarak, isterseniz burada roller de kullanılabilir:

config.activities(function(activities){
activities.can("admin", function(identity, params, callback) {
var user = identity.user;
var isAdmin = (user.roles.indexOf("admin") > -1);
callback(null, isAdmin);
});
});
Çeşitli diğer yapılandırmalar


Mevcut istekten kullanıcı nesnesinin yüklenmesi ve başarısız kimlik doğrulama ve başarısız yetkilendirme gibi standart durumların ele alınması gibi çeşitli yönler, uygun yardımcı yöntemler kullanılarak yapılandırılabilir:

config.routeHelpers(function(routeHelpers){
/* ... */
routeHelpers.notAuthorized(function(req, res, next){
res.redirect("/login");
});

routeHelpers.notAuthenticated(function(req, res, next){
res.redirect("/login");
});

/* ... */
});

Express ile entegrasyon


MustBe’yi kurduktan sonra, Express ile entegre etmek artık nispeten basit. Bunu yapmak için, karşılık gelen yol tanımı basitçe çağrılır. mustBe.yetkili() akış yukarı. Yani yazmak yerine

var router = new express.Router();
router.get("/", function (req, res, next) {
res.render("items");
}
);

aşağıdaki gibi izin ekleyin:

var router = new express.Router();
router.get("/", mustBe.authorized("items.view", function (req, res, next) {
res.render("items");
}
)
);

Bu, artık sayfayı oluşturmadan önce elementler Her şeyden önce, kayıtlı kullanıcının (veya daha genel olarak: kayıtlı kimliğin) haklarına, faaliyetine sahip olup olmadığı kontrol edilir. öğeler.görünüm yürütmek için.

Alternatif olarak, MustBe ara yazılım olarak da kullanılabilir. Bu, örneğin tüm bir yol alt ağacına bir görev eklemek istediğinizde (örn. elementler/*) atamak istiyorum. Bu yöntem kullanılarak elde edilebilir rotaHelper() aşağıdaki gibi:

app.use("/items", mustBe.routeHelpers().authorized("items.view",
function(req, res, next) {
next();
}
));
Çözüm


MustBe modülü, Express Framework’e nispeten kolay bir şekilde entegre edilebilir ve izin seçenekleriyle genişletilebilir. MustBe, etkinliklerle ekstra bir soyutlama katmanı sunar, böylece kodunuz bu noktada rol tanımlarından bağımsız kalabilir (ancak zorunlu değildir). Kimlik doğrulama söz konusu olduğunda, MustBe herhangi bir özellik belirtmez ve ilke olarak herhangi bir kimlik doğrulama modülünün entegrasyonuna izin verir.


()



Haberin Sonu
 
Üst