1个不稳定版本

0.1.0 2023年2月25日

#24#cdk

Download history 2/week @ 2024-06-29 14/week @ 2024-07-06 51/week @ 2024-07-27

每月65次下载

MIT 许可证

20KB
473

Departure Labs Authorize

支持 Departure Labs DLIP 3

这是一个用于创建和评估基于资源的策略的库。

策略的核心组件包括 EffectStatementRequestPolicy

  • Effect:表示语句对请求效果的一个枚举
  • Statement:一组条件(例如,身份、资源、操作),用于确定请求的效果
  • Request:一个包含请求操作、资源和调用者信息的对象
  • Policy:一组语句

工作原理

Policy 是一组规则,表示为 Statement 对象的列表,用于确定是否授权 Request。每个 Statement 都有一个 Effect,指定该语句是否允许或拒绝对特定资源的访问。当多个语句适用于同一请求时,策略 必须最不许可的语句 中选择 Effect

通过使用 PolicyRequest 一起,此授权系统可以根据 Policy 中规定的规则评估是否授权特定请求。

用法

创建策略

通过实例化一个 Policy 并向其中添加 Statement 来创建策略

let mut policy = Policy::default();

let statement1 = Statement::new(
    Effect::Allow,
    vec![StatementIdentity::Any],
    vec!["read".to_string()],
    vec![StatementResource::Resource("/path/to/resource".to_string())],
);

policy.add_statement(statement1);

let statement2 = Statement::new(
    Effect::Deny,
    vec![StatementIdentity::Identity(Principal::User("bob".to_string()))],
    vec!["write".to_string(), "delete".to_string()],
    vec![StatementResource::Resource("/path/to/resource".to_string())],
);

policy.add_statement(statement2);

评估策略

通过实例化一个 Request 并将其传递给 Policy::get_effect 方法来评估策略

let request = Request::new(
    "read".to_string(),
    RequestResourceBuilder::new("/path/to/resource").build(),
    Principal::User("bob".to_string()),
);
let effect = policy.get_effect(&request);
assert_eq!(effect, Effect::Deny);


依赖项

~5–14MB
~152K SLoC