Actix Casbin

Crates.io Docs Auto Build codecov

Casbin intergration for actix framework

Install

Add it to Cargo.toml

rust actix-casbin = "0.3.2" actix-rt = "1.1.1"

Example

  1. Using actix-casbin as actor alone

```rust use actixcasbin::casbin::{DefaultModel, FileAdapter, Result, Enforcer}; use actixcasbin::{CasbinActor, CasbinCmd, CasbinResult};

[actix_rt::main]

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;

[actix_rt::main]

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().await;

let addr = CasbinActor::<CachedEnforcer>::set_enforcer(enforcer)
    .await?;
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(())

} ```

License

This project is licensed under