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