14 个版本 (2 个稳定版)
1.1.0 | 2024年3月3日 |
---|---|
0.4.2 | 2020年9月12日 |
0.3.0 | 2020年7月29日 |
#129 in 异步
16KB
221 行
Actix Casbin
安装
将其添加到 Cargo.toml
cargo add actix-casbin
cargo add actix-rt
示例
- 单独使用 actix-casbin 作为 actor
use actix_casbin::casbin::{DefaultModel, FileAdapter, Result, Enforcer};
use actix_casbin::{CasbinActor, CasbinCmd, CasbinResult};
#[actix_rt::main]
async fn main() -> Result<()> {
let m = DefaultModel::from_file("examples/rbac_model.conf").await?;
let a = FileAdapter::new("examples/rbac_policy.csv");
let addr = CasbinActor::<Enforcer>::new(m, a).await?;
let res = addr
.send(CasbinCmd::Enforce(
vec!["alice", "data1", "read"]
.iter()
.map(|s| (*s).to_string())
.collect(),
))
.await;
let test_enforce = match res {
Ok(Ok(CasbinResult::Enforce(result))) => result,
_ => panic!("Actor Error"),
};
if test_enforce {
println!("Enforce Pass");
} else {
println!("Enforce Fail");
}
Ok(())
}
- 使用 casbin actix 中间件 actix-casbin-auth
use actix_casbin::casbin::{DefaultModel, FileAdapter, Result, CachedEnforcer};
use actix_casbin::{CasbinActor, CasbinCmd, CasbinResult};
use actix_casbin_auth::CasbinService;
#[actix_rt::main]
async fn main() -> Result<()> {
let m = DefaultModel::from_file("examples/rbac_model.conf")
.await?;
let a = FileAdapter::new("examples/rbac_policy.csv");
let mut casbin_middleware = CasbinService::new(m, a).await;
let enforcer = casbin_middleware.get_enforcer();
let addr = CasbinActor::<CachedEnforcer>::set_enforcer(enforcer)?;
if let CasbinResult::Enforce(test_enforce) = addr
.send(CasbinCmd::Enforce(
vec!["alice", "data1", "read"]
.iter()
.map(|s| s.to_string())
.collect(),
))
.await;
let test_enforce = match res {
Ok(Ok(CasbinResult::Enforce(result))) => result,
_ => panic!("Actor Error"),
};
if test_enforce {
println!("Enforce Pass");
} else {
println!("Enforce Fail");
}
Ok(())
}
许可证
本项目的许可证为
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
依赖项
~23–38MB
~678K SLoC