Last active
December 28, 2019 02:49
-
-
Save xcaptain/19ee94b330e2dbb0ed8798d836d5e48b to your computer and use it in GitHub Desktop.
actix-web casbin demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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