From 1cc73366c57e2ad592470efb01387b3ebc7f8bc3 Mon Sep 17 00:00:00 2001 From: Christian Beier Date: Wed, 19 Jan 2022 20:49:57 +0100 Subject: [PATCH] Fix deadlock in casbin example (#471) Co-authored-by: Rob Ede --- Cargo.lock | 1 + security/casbin/Cargo.toml | 1 + security/casbin/src/main.rs | 6 +++--- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 27b5b3b3..2332fe72 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,6 +57,7 @@ dependencies = [ "loge", "rhai", "rhai_codegen", + "tokio 0.2.25", ] [[package]] diff --git a/security/casbin/Cargo.toml b/security/casbin/Cargo.toml index f90a09e4..48185d7e 100644 --- a/security/casbin/Cargo.toml +++ b/security/casbin/Cargo.toml @@ -13,3 +13,4 @@ casbin = "=2.0.5" rhai = "=0.19.14" rhai_codegen = "=0.3.3" loge = {version = "0.4", default-features = false, features = ["colored", "chrono"]} +tokio = { version = "0.2.22", features = ["sync"] } diff --git a/security/casbin/src/main.rs b/security/casbin/src/main.rs index 4d7b8da8..c6f81e33 100644 --- a/security/casbin/src/main.rs +++ b/security/casbin/src/main.rs @@ -1,6 +1,6 @@ use casbin::{CoreApi, DefaultModel, Enforcer, FileAdapter, RbacApi}; use std::io; -use std::sync::RwLock; +use tokio::sync::RwLock; use actix_web::{middleware, web, App, HttpRequest, HttpResponse, HttpServer}; @@ -9,7 +9,7 @@ async fn success( enforcer: web::Data>, req: HttpRequest, ) -> HttpResponse { - let mut e = enforcer.write().unwrap(); + let mut e = enforcer.write().await; println!("{:?}", req); assert_eq!(vec!["data2_admin"], e.get_roles_for_user("alice", None)); @@ -17,7 +17,7 @@ async fn success( } async fn fail(enforcer: web::Data>, req: HttpRequest) -> HttpResponse { - let mut e = enforcer.write().unwrap(); + let mut e = enforcer.write().await; println!("{:?}", req); assert_eq!(vec!["data1_admin"], e.get_roles_for_user("alice", None));