#sea-orm #casbin #mysql #postgresql #sqlite

sea_orm_casbin_adapter

❤ sea_orm的casbin适配器

8个版本

0.3.8 2022年5月12日
0.3.2 2022年4月12日
0.3.1 2022年2月9日
0.2.5 2022年2月8日
0.1.5 2021年11月30日

#1037数据库接口

Download history 6/week @ 2024-03-28 1/week @ 2024-04-04 2/week @ 2024-06-27 53/week @ 2024-07-04

每月55次下载

MIT 许可证

33KB
639

sea orm casbin adapter

更新

1. the version 3.0 is enabled only `logging` freatrue .
2. you can use any run_time to run the adapter. but same with the sea-orm's run_time.
[dependencies]
sea_orm_casbin_adapter = {version = "0.3", features = ["mysql", "runtime-tokio-native-tls"]}
sea-orm = {version = "0.6.0", default-features = false, features = ["sqlx-mysql", "macros", "runtime-tokio-native-tls"]}

[dependencies]
sea_orm_casbin_adapter = {version = "0.3", features = ["mysql", "runtime-tokio-native-tls"]}

[dependencies.sea-orm]
default-features = false
features = ["macros", "runtime-tokio-native-tls"]
version = "0.6.0"

[features]
default = ["postgres", "mysql"]
mysql = ["sea-orm/sqlx-mysql"]
postgres = ["sea-orm/sqlx-postgres"]
sqlite = ["sea-orm/sqlx-sqlite"]

简介

sea-orm-casbin-adapter是sea-orm的casbin适配器。
就像sqx-adapter一样,它可以在sea-orm中使用。

测试

testcase/测试示例

...

一个与sea-orm配合使用的适配器。它仅在Mysql、Postgresql上进行了测试,可能不支持Sqlite3。

使用方法<使用方法>

  1. 添加依赖
[dependencies]
sea_orm_casbin_adapter = "*"
tokio = "*"
  1. 添加casbin模型策略文件
  2. 将代码添加到您的代码中
use sea_orm_casbin_adapter::{casbin::prelude::*, SeaOrmAdapter};

#[tokio::main]
async fn main() -> Result<()> {
 let m = DefaultModel::from_file("config/casbin_conf/rbac_model.conf")
     .await
     .unwrap();

 // mysql://root:[email protected]:13306/wk
 // postgres://postgres:[email protected]:25432/wk
 let db = SeaOrmAdapter::new("postgres://postgres:[email protected]:25432/wk")
     .await
     .expect("open db error");

 let mut e = Enforcer::new(m, db).await?;
 e.enable_log(true);
 e.add_named_policy(
     "g",
     vec![
         "data9_admin".to_string(),
         "data9".to_string(),
         "write".to_string(),
     ],
 )
 .await
 .unwrap();

 e.add_policy(
     vec![
         "dataxx_admin".to_string(),
         "dataxx".to_string(),
         "write".to_string(),
     ],
 )
 .await
 .unwrap();

 e.add_policies(vec![
     vec![
         "data1_admin".to_string(),
         "data4".to_string(),
         "write".to_string(),
     ],
     vec![
         "data3_admin".to_string(),
         "data5".to_string(),
         "write".to_string(),
     ],
 ])
 .await
 .unwrap();

 // e.remove_policies(vec![
 //     vec![
 //         "data6_admin".to_string(),
 //         "data4".to_string(),
 //         "write".to_string(),
 //     ],
 //     vec![
 //         "data6_admin".to_string(),
 //         "data5".to_string(),
 //         "write".to_string(),
 //     ],
 // ])
 // .await
 // .unwrap();
 println!("C===============");
 e.enforce(("data2_admin", "data2", "write"))?;
 println!("D===============");

 println!("e===============");

 Ok(())
}

支持直接传入数据库连接

let m = DefaultModel::from_file("config/casbin_conf/rbac_model.conf")
     .await
     .unwrap();
 let pool: DatabaseConnection = Database::connect("protocol://username:password@host/database").await?;
 let adpt = SeaOrmAdapter::new_with_pool(pool).await.unwrap();
 let mut e = Enforcer::new(m, adpt).await?;
 e.enforce(("data2_admin", "data2", "write"))?;

依赖项

~14–38MB
~593K SLoC