# @cloudflare/authr 中文文档

规范地址：https://npmcn.com/package/%40cloudflare/authr/

版本：3\.0\.0
npm 元数据更新时间：2026-09-03T14:17:56.099Z
中文译文更新时间：2026-11-10T03:06:55.087Z
软件包许可：BSD-3-Clause

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cloudflare/authr
原文对照：https://npmcn.com/package/%40cloudflare/authr/?lang=original
项目主页：https://github.com/cloudflare/authr#readme
源码仓库：https://github.com/cloudflare/authr

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：53.9 kB，37 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2018-03-13T17:53:37.140Z
- 最新版本发布：2020-11-27T00:03:25.826Z
- 近 30 天下载量：260277（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

一个灵活的,表达性的,语言不可知的接入控制框架.

## 安装

```sh
npm install @cloudflare/authr
```

也可以使用：`pnpm add @cloudflare/authr`、`yarn add @cloudflare/authr`、`bun add @cloudflare/authr`

## README

# 自动

一个令人难以置信的颗粒和表达性许可框架.

## 开始中

启动,安装软件包!

```
npm install --save @cloudflare/authr
```

### 为 authr 设置对象

尽管我们使用打字机来进行js执行,但我们必须能够与js相接,我们仍然需要保证authr处理的对象有专用于它的方法,我们需要JS接口。 但是由于Javascript没有这样的东西, 我们可以使用 [符号](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol)。 。 。 .

符号有很多用法,但为了奥弗尔的目的,它保证某个对象已经明确执行特定功能,专门用于奥弗尔;有点像接口! 这些符号作为导出常数供包使用.

_说明:a **数量** 关于这个图书馆的哲学和内部工作的重要细节都被蒙蔽了. 如果您尚未读取主要读取内容,则强烈建议您这样做: [云层/自动/README.md](https://github.com/cloudflare/authr/blob/master/README.md)_

#### 获取( R)

为了在这个系统中建立一个主题(也叫"actor"),这个常数的MUST是分配给可调用函数的对象的密钥. 当函数被调用时,它必须返回一组 `Rule`编号.

键入界面定义是:

```typescript
interface ISubject {
    [GET_RULES](): Rule[];
}
```

在js中执行,它可能会 最终看起来像:

```js
import { GET_RULES, Rule } from '@cloudflare/authr';

var user = {
    [GET_RULES]: () => ([
        Rule.allow({
            rsrc_type: 'zone',
            rsrc_match: [['@id', '=', '123']],
            action: ['delete', 'pause']
        }),
        Rule.deny({
            rsrc_type: 'private_key',
            rsrc_match: [],
            action: '*'
        })
    ])
};
```

一旦你有了这个, 你刚刚设置了一个主题 在自闭症框架! 主体是系统中能够针对具体资源采取行动的实体.

资源,有 _两个_ 在对象上执行的符号使其成为可识别的资源.

#### 获取资源 类型

此常数 MUST 是指定用于返回识别资源类型的字符串的可调用函数的对象的密钥 。 像这样:

```js
import { GET_RESOURCE_TYPE } from '@cloudflare/authr';

var resource = {
    [GET_RESOURCE_TYPE]: () => 'zone'
};
```

很简单的功能,对吧? 许可框架中的“资源”是指能够采取行动的实体,例如区域(云浮对象),甚至用户.

#### 获取资源( A)

此常数 MUST 是指定用于调用函数的对象的密钥 。 当函数被调用时,它将被赋予一个字符串参数,指定正在寻找的属性的密钥. 像这样:

```js
import {
    GET_RESOURCE_TYPE,
    GET_RESOURCE_ATTRIBUTE
} from '@cloudflare/authr';

var resource = {
    [GET_RESOURCE_TYPE]: () => 'zone',
    [GET_RESOURCE_ATTRIBUTE]: k => {
        var attr = {
            'id': 123,
            'type': 'full'
        };
        return attr[k] || null;
    }
};
```

在对象中使用这两个常数时, 您刚刚在 authr 框架中设置了资源 !

##### 别急! 符号像地狱一样是新的,不能被用在旧浏览器上!

嗯,是的,但有些不错的 [嘘](https://github.com/medikoo/es6-symbol) 能实现同样的目标 并不理想,但是,它得到了工作完成.

## api 密码

当所有物体都已经就绪 并准备好它们的常数时, 你终于可以开始检查访问控制。 在这个框架内,只有一个方法可以做到这一点: `can`。 。 。 .

### 可(\[标 、\[行动\]、\[资源\]):布尔

这是自闭症的核心功能, 终极问题:"这能否 **主题** 执行此功能 **动作** 这上面 **资源**? 吗

为了得到这个问题的答案,我们必须把所有三个参数都通过这个功能

-   `subject` `ISubject` - 试图采取行动的主体(行为者)
-   `action` 字符串 - 正在尝试的动作
-   `resource` `IResource` - 受变化影响的资源

返回时 `true` 如果他们被允许 `false` 如果他们不是.

#### 实例

```js
import {
    can
    GET_RULES,
    GET_RESOURCE_TYPE,
    GET_RESOURCE_ATTRIBUTE,
    Rule
} from '@cloudflare/authr';

var admin = {
    [GET_RULES]: () => ([
        Rule.allow({
            rsrc_type: 'zone',
            rsrc_match: [['@status', '=', 'V']],
            action: '*'
        })
    ])
};

var user = {
    [GET_RULES]: () => ([
        Rule.allow({
            rsrc_type: 'zone',
            rsrc_match: [['@id', '=', '123']],
            action: ['init', 'delete']
        })
    ])
};

var zones = {
    '123': {
        [GET_RESOURCE_TYPE]: () => 'zone',
        [GET_RESOURCE_ATTRIBUTE]: k => {
            var attr = {
                'id': 123,
                'status': 'V'
            };
            return attr[k] || null;
        }
    },
    '567': {
        [GET_RESOURCE_TYPE]: () => 'zone',
        [GET_RESOURCE_ATTRIBUTE]: k => {
            var attr = {
                'id': 567,
                'status': 'V'
            };
            return attr[k] || null;
        }
    }
};

console.log(can(admin, 'delete', zones['123'])); // => true
console.log(can(user, 'delete', zones['567'])); // => false
console.log(can(admin, 'do_admin_things', zones['123'])); // true

```

## 常见问题

### @cloudflare/authr 是什么？

一个灵活的,表达性的,语言不可知的接入控制框架\.

### 如何安装 @cloudflare/authr？

在项目目录运行 npm install @cloudflare/authr，或使用 pnpm add / yarn add / bun add。

### @cloudflare/authr 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @cloudflare/authr 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @cloudflare/authr 可以商用吗？

@cloudflare/authr 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### @cloudflare/authr 的下载量有多少？

根据 npm 官方下载统计，@cloudflare/authr 在 2026/10/10 – 2026/11/08 这 30 天内被下载 260,277 次，日均约 8,676 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @cloudflare/authr 还在维护吗？

最新版本 3\.0\.0 发布于 2020/11/27（5 年前）；至今共发布 7 个版本，其中过去 12 个月发布了 0 个；首次发布于 2018/03/14。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

