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 日 |
#590 in 算法
每月 440 次下载
用于 14 个包(通过 bonsaidb-core)
56KB
1.5K SLoC
actionable
Actionable 提供了构建基于异步的、集成了灵活权限系统的 API 所需的基本功能。
此包旨在由 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语句,为了可读性和可维护性,只需简单地将请求的参数传递给一个辅助方法来处理请求的实际逻辑。
这个crate的API部分的目标是用一个简单的derive宏替换上述样板式的match语句。关于注释示例,请查看actionable/examples/api-simulator.rs
。
开源许可
该项目,就像Khonsu Labs的所有项目一样,都是开源的。此仓库在MIT许可证或Apache许可证2.0下可用。
依赖项
~0.8–1.4MB
~32K SLoC