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日

#72#permissions

Download history 185/week @ 2024-03-11 143/week @ 2024-03-18 202/week @ 2024-03-25 232/week @ 2024-04-01 146/week @ 2024-04-08 145/week @ 2024-04-15 174/week @ 2024-04-22 129/week @ 2024-04-29 86/week @ 2024-05-06 92/week @ 2024-05-13 138/week @ 2024-05-20 137/week @ 2024-05-27 93/week @ 2024-06-03 110/week @ 2024-06-10 98/week @ 2024-06-17 107/week @ 2024-06-24

每月下载量 425
用于 15 个 crate(通过 actionable

MIT/Apache

32KB
625

actionable

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

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