cerbos webassebly 集成简单说明
cerbos 包含了一个lite 包,可以方便不依赖backend server 进行认证,内部基于了webassebly 进行policy 的存储
参考使用
- policies.wasm 文件
此文件来自官方的测试,实际上目前官方文档暂时没有说明此文件如何生成,但是通过官方测试文件可以看到一些东西,后边我会说
以下内容
- app.js
const { Lite } = require("@cerbos/lite")
const {readFileSync} = require("fs")
const { resolve } = require("path")
const client = new Lite(
readFileSync(resolve(__dirname, "./policies.wasm"))
);
async function isAllowed() {
const allowed = await client.isAllowed({
principal: {
id: "me@example.com",
policyVersion: "1",
scope: "test",
roles: ["USER"],
attr: {
country: {
alpha2: "",
alpha3: "NZL",
},
},
},
resource: {
kind: "document",
id: "mine",
policyVersion: "1",
scope: "test",
attr: {
owner: "me@example.com",
},
},
action: "edit",
includeMetadata: true,
requestId: "42",
});
console.log(allowed);
}
isAllowed();
- 效果
说明
目前webassembly 文件的生成暂时没有资料介绍的(应该是官方hub 中通过ci/cd 生成的)同时测试webassembly 文件可以看出应该是基于自己开发的一些rust cli 工具生成的,其中deallocate,set_globals,allocate,check 是几个比较重要的方法
参考资料
https://docs.cerbos.dev/cerbos-hub/decision-points-embedded.html
https://github.com/cerbos/cerbos-sdk-javascript/blob/main/docs/lite.lite.md
https://github.com/cerbos/cerbos-sdk-javascript/tree/main/packages/lite