21 releases (1 stable)

1.0.0 Feb 1, 2024
0.9.0 Jan 31, 2021
0.8.3 Dec 25, 2020
0.8.1 Sep 27, 2020
0.3.1 Mar 27, 2020

#558 in Database interfaces

Download history 80/week @ 2024-03-30 22/week @ 2024-04-06 9/week @ 2024-04-20 115/week @ 2024-04-27 132/week @ 2024-05-04 31/week @ 2024-05-11 93/week @ 2024-06-29

93 downloads per month


942 lines

Diesel Adapter for Casbin-RS (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.


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;


Add it to Cargo.toml

diesel-adapter = { version = "0.9.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 env

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

# DATABASE_URL=mysql://casbin_rs:casbin_rs@localhost:3306/casbin
# DATABASE_URL=casbin.db

Or you can export DATABASE_URL, POOL_SIZE

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


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

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


~753K SLoC