#async-api #permissions #api #async #server-api #database-server

actionable

基于枚举的异步框架,用于构建具有灵活权限系统的 API

11 个版本

0.2.0 2022 年 2 月 18 日
0.1.0 2022 年 1 月 27 日
0.1.0-rc.32021 年 12 月 7 日
0.1.0-rc.22021 年 11 月 9 日
0.1.0-dev.42021 年 7 月 23 日

#590 in 算法

Download history 138/week @ 2024-03-06 197/week @ 2024-03-13 143/week @ 2024-03-20 253/week @ 2024-03-27 131/week @ 2024-04-03 170/week @ 2024-04-10 144/week @ 2024-04-17 152/week @ 2024-04-24 116/week @ 2024-05-01 79/week @ 2024-05-08 120/week @ 2024-05-15 122/week @ 2024-05-22 126/week @ 2024-05-29 88/week @ 2024-06-05 105/week @ 2024-06-12 81/week @ 2024-06-19

每月 440 次下载
用于 14 个包(通过 bonsaidb-core

MIT/Apache

56KB
1.5K SLoC

actionable

crate version Live Build Status HTML Coverage Report for main branch Documentation for main branch

Actionable 提供了构建基于异步的、集成了灵活权限系统的 API 所需的基本功能。

此包旨在由 BonsaiDb 内部使用,并作为 BonsaiDb 用户扩展其数据库服务器以使用自己的 API 的方式。

权限

Permissions 结构体是由一系列 Statement 组成的。结构体 StatementIAM 中的语句 启发。默认情况下,对所有资源都拒绝所有操作。

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