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