Gatehouse:Rust 中可组合的、异步友好的授权策略框架

Build status Crates.io Documentation

一个灵活的授权库,结合了基于角色(RBAC)、基于属性(ABAC)和基于关系(ReBAC)的访问控制策略。

Gatehouse Logo

主要特性

核心组件

Policy Trait

授权系统的基础:

#[async_trait]
trait Policy<Subject, Resource, Action, Context> {
  async fn evaluate_access(
    &self,
    subject: &Subject,
    action: &Action,
    resource: &Resource,
    context: &Context,
  ) -> PolicyEvalResult;
}

PermissionChecker

默认情况下,使用 OR 逻辑聚合多个策略(例如,RBAC、ABAC):如果任何策略授予访问权限,则授予权限。

let mut checker = PermissionChecker::new();
checker.add_policy(rbac_policy);
checker.add_policy(owner_policy);
// 检查是否授予访问权限
let result = checker.evaluate_access(&user, &action, &resource, &context).await;
if result.is_granted() {
  // 允许访问
} else {
  // 拒绝访问
}

PolicyBuilder

PolicyBuilder 提供了一个流畅的 API,通过链接 subject、action、resource 和 context 的谓词函数来构建自定义策略。 构建完成后,可以将策略添加到 [PermissionChecker]。

let custom_policy = PolicyBuilder::<MySubject, MyResource, MyAction, MyContext>::new("CustomPolicy")
  .subjects(|s| /* ... */)
  .actions(|a| /* ... */)
  .resources(|r| /* ... */)
  .context(|c| /* ... */)
  .when(|s, a, r, c| /* ... */)
  .build();

内置策略

组合器

示例

请参阅 examples 目录,以获取以下内容的完整演示:

运行示例:

cargo run --example rbac_policy

关于

一个灵活的授权库,结合了基于角色(RBAC)、基于属性(ABAC)和基于关系(ReBAC)的访问控制策略。

资源

Stars

Watchers

Forks

Report repository

Releases 2

Packages 0

No packages published

Contributors 2

语言