@ evanion/ acl
始终如一的 本地授权 贯穿你整个堆.
大多数应用都受到"Authorization Bottleneck"的困扰:你要么为每个UI按钮和API端点做一个缓慢的网络回路,要么通过在前端和后端复制相同的逻辑来冒险脆弱的bug. @evanion/acl 通过让您将您的授权逻辑定义为一次可序列化的矩阵,并在本地- 在您的节点后端、 在您的 Next.js 服务器组件中或直接在浏览器中评估它来解决这个问题 .
import { hydratePolicy, policy } from '@evanion/acl';
type Shopper = { id: string; roles: string[] };
type Question = { id: string; askedBy: string };
const access = policy<Shopper, { question: Question }>()
.for('question', (p) =>
p.allow('delete', p.contains('subject.roles', 'bookseller')),
)
.build();
const bookseller = { id: 'staff-3', roles: ['bookseller'] };
const customer = { id: 'customer-41', roles: ['customer'] };
const question = { id: 'q7', askedBy: 'customer-41' };
// ---cut---
// The server sends the matrix as JSON text, and the browser rebuilds from it.
const json = JSON.stringify(access.matrix);
const inBrowser = hydratePolicy(JSON.parse(json));
inBrowser.can(bookseller, 'question', 'delete', question).allowed; // -> true
inBrowser.can(customer, 'question', 'delete', question).allowed; // -> false
能力地图
这个 @evanion/acl 软件包提供以下能力:
- 地方决定: 决定是同步函数调用,没有
await没有网络请求. - 单一真相来源: 前端和后端的答案来自与JSON一样被运出的一个矩阵.
- 安全关闭失败: 默认不予批准;向建筑扔出错误的文件和未经处理的行动被拒绝.
- 外地一级的控制: 使用
canFields来决定用户可以更改的字段. - 环境不可知论:在浏览器和节点20+中运行;它只是没有运行时间或同行依赖性的无害环境管理.
安装
npm install @evanion/acl
安保合同
一个决定只有在像您的服务器这样的可信环境中运行才具有权威性; 在浏览器中相同 can 调用是咨询,只改变用户看到的。 每一层都由自己决定 并且不相信更早的人 因为矩阵船全向客户端,其名称和结构是一份公开文件;解决主题,涵盖每个访问路径,以及写出时间的再检查仍然是您申请的工作. 整个担保合同是在 警卫 报告 安全页面。 。 。 .
文档
如欲深入安全模式、实地许可、综合指南等
👉 libs.evanion.com/docs/acl (中文(简体) )
许可证
麻省理工学院