11 个版本
| 0.2.0 | 2022年2月18日 |
|---|---|
| 0.1.0 | 2022年1月27日 |
| 0.1.0-rc.3 | 2021年12月7日 |
| 0.1.0-rc.2 | 2021年11月9日 |
| 0.1.0-dev.4 | 2021年7月23日 |
#72 在 #permissions
每月下载量 425
用于 15 个 crate(通过 actionable)
32KB
625 行
actionable
Actionable 提供构建具有灵活权限系统的异步 API 所需的基本功能。
此 crate 旨在由 BonsaiDb 内部使用,并作为 BonsaiDb 用户扩展其数据库服务器以使用自己的 API 的一种方式。
权限
Permissions 结构体由一系列 Statement 构成。该 Statement 结构体受到 IAM 中的语句 的启发。默认情况下,所有资源都拒绝所有操作。
ResourceName 结构体描述了应用程序中任何 东西 的唯一名称/ID。这旨在类似于 IAM 中的 ARN,但与受此库格式限制不同,您可以定义自己的语法。
Action 特性是可派生的,并将任何枚举转换为可以允许或拒绝任何 ResourceName 的东西。此派生宏仅支持具有无参数或仅具有单个无名称参数且也实现 Action 的枚举。
一个示例 Action 枚举可能如下所示
#[derive(Action, Debug)]
pub enum AllActions {
FlushCache,
User(UserActions)
}
#[derive(Action, Debug)]
pub enum UserActions {
Create,
ChangeUsername,
Delete,
}
对 users.42 的权限检查示例可能如下所示
let allowed = permissions.allowed_to(
&ResourceName::named("users").and(42),
&AllActions::User(UserActions::Delete)
);
权限驱动的异步 API
许多用Rust编写的网络API的核心是一个表示请求的枚举,类似地,通常也有常见的响应/错误类型。在这些应用程序中,通常会有一个手动编写的match语句,为了可读性和可维护性,只需简单地将请求参数传递给辅助方法来处理请求的实际逻辑。
本项目API部分的目标是用一个简单的derive宏替换上述样板match语句。对于示例,请查看actionable/examples/api-simulator.rs。
开源许可证
本项目,就像Khonsu Labs的所有项目一样,是开源的。本仓库在MIT许可证或Apache许可证2.0下可用。
依赖关系
~0.7–1.1MB
~25K SLoC