Diesel adapter for Casbin-RS

Clone this repo:
  1. 89f9ffd chore: Update Cargo.toml to use repository instead of homepage (#95) by Gábor Szabó · 9 months ago master
  2. bb84a06 feat: bump version to 1.2.0 by Yang Luo · 9 months ago v1.2.0
  3. 39975ab feat: Adds the ability to pass in a pool (#94) by Josh Converse · 9 months ago
  4. a5aab05 feat: bump version to 1.1.0 by Yang Luo · 9 months ago v1.1.0
  5. bf3f5b5 feat: fix coverage CI error by Yang Luo · 9 months ago

Diesel Adapter for Casbin-RS (Casbin for Rust)

Crates.io Docs CI codecov

Diesel Adapter is the Diesel adapter for Casbin-RS. With this library, Casbin can load policy from Diesel supported database or save policy to it.

Based on Diesel, The current supported databases are:

Attention: postgres, mysql, sqlite are mutual exclusive which means that you can only activate one of them.

Notice

In order to unify the database table name in Casbin ecosystem, we decide to use casbin_rule instead of casbin_rules from version 0.9.0. If you are using old version diesel-adapter in your production environment, please use following command and update diesel-adapter version:

# MySQL & PostgreSQL & SQLite
ALTER TABLE casbin_rules RENAME TO casbin_rule;

Install

Add it to Cargo.toml

diesel-adapter = { version = "1.2.0", features = ["postgres"] }
tokio = { version = "1.1.1", features = ["macros", "rt-multi-thread"] }

Warning: tokio v1.0 or later is supported from diesel-adapter v0.9.0, we recommend that you upgrade the relevant components to ensure that they work properly. The last version that supports tokio v0.2 is diesel-adapter v0.8.3 , you can choose according to your needs.

Configure

Configure env

Rename sample.env to .env and put DATABASE_URL, POOL_SIZE inside

DATABASE_URL=postgres://casbin_rs:casbin_rs@localhost:5432/casbin
# DATABASE_URL=mysql://casbin_rs:casbin_rs@localhost:3306/casbin
# DATABASE_URL=casbin.db
POOL_SIZE=8

Or you can export DATABASE_URL, POOL_SIZE

export DATABASE_URL=postgres://casbin_rs:casbin_rs@localhost:5432/casbin
export POOL_SIZE=8

Example

use diesel_adapter::casbin::prelude::*;
use diesel_adapter::DieselAdapter;

#[tokio::main]
async fn main() -> Result<()> {
    let mut m = DefaultModel::from_file("examples/rbac_model.conf").await?;
    let a = DieselAdapter::new("postgres://casbin_rs:casbin_rs@127.0.0.1:5432/casbin", 8)?;
    let mut e = Enforcer::new(m, a).await?;
    Ok(())
}