Skip to content

Instantly share code, notes, and snippets.

@xcaptain
Last active December 28, 2019 02:49
Show Gist options
  • Save xcaptain/19ee94b330e2dbb0ed8798d836d5e48b to your computer and use it in GitHub Desktop.
Save xcaptain/19ee94b330e2dbb0ed8798d836d5e48b to your computer and use it in GitHub Desktop.
actix-web casbin demo
use std::io;
use std::sync::{Arc, RwLock};
use casbin::{Enforcer, FileAdapter, Model, RbacApi};
use actix_web::{middleware, web, App, HttpRequest, HttpResponse, HttpServer};
/// simple handle
async fn index(enforcer: web::Data<RwLock<Enforcer<FileAdapter>>>, req: HttpRequest) -> HttpResponse {
println!("{:?}", req);
assert_eq!(vec!["data1_admin"], enforcer.write().unwrap().get_roles_for_user("alice"));
HttpResponse::Ok().body(format!("Num of requests: {}", 1))
}
#[actix_rt::main]
async fn main() -> io::Result<()> {
std::env::set_var("RUST_LOG", "actix_web=info");
env_logger::init();
let e = Enforcer::new(Model::new_from_file("rbac_model.conf"), FileAdapter::new("rbac_policy.csv"));
let e = web::Data::new(RwLock::new(e)); // wrap enforcer into actix-state
//move is necessary to give closure below ownership of counter
HttpServer::new(move || {
App::new()
.app_data(e.clone()) // <- create app with shared state
// enable logger
.wrap(middleware::Logger::default())
// register simple handler, handle all methods
.service(web::resource("/").to(index))
})
.bind("127.0.0.1:8080")?
.run()
.await
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment