Casbin intergration for actix framework
Add it to Cargo.toml
rust
actix-casbin = "0.4.1"
actix-rt = "1.1.1"
```rust use actixcasbin::casbin::{DefaultModel, FileAdapter, Result, Enforcer}; use actixcasbin::{CasbinActor, CasbinCmd, CasbinResult};
async fn main() -> Result<()> { let m = DefaultModel::fromfile("examples/rbacmodel.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(())
}
2. Use actix-casbin with casbin actix middleware [actix-casbin-auth](https://github.com/casbin-rs/actix-casbin-auth)
rust
use actixcasbin::casbin::{DefaultModel, FileAdapter, Result, CachedEnforcer};
use actixcasbin::{CasbinActor, CasbinCmd, CasbinResult};
use actixcasbinauth::CasbinService;
async fn main() -> Result<()> { let m = DefaultModel::fromfile("examples/rbacmodel.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(())
} ```
This project is licensed under