1个不稳定版本
| 0.1.0 | 2023年2月25日 |
|---|
#24 在 #cdk
每月65次下载
20KB
473 行
Departure Labs Authorize
这是一个用于创建和评估基于资源的策略的库。
策略的核心组件包括 Effect、Statement、Request 和 Policy
Effect:表示语句对请求效果的一个枚举Statement:一组条件(例如,身份、资源、操作),用于确定请求的效果Request:一个包含请求操作、资源和调用者信息的对象Policy:一组语句
工作原理
Policy 是一组规则,表示为 Statement 对象的列表,用于确定是否授权 Request。每个 Statement 都有一个 Effect,指定该语句是否允许或拒绝对特定资源的访问。当多个语句适用于同一请求时,策略 必须 从 最不许可的语句 中选择 Effect。
通过使用 Policy 和 Request 一起,此授权系统可以根据 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