Actix Permissions Continuous Integration cargo-badge license-badge rust-version-badge

Permission and input validation extension for Actix Web. Alternative to actix guard, with access to app data injections, HttpRequest and Payload.

Example

Dependencies:
toml [dependencies] actix-permissions = "0.1.0-beta.1" Code: ```rust use actixpermissions::{check, with}; use actixweb::dev::; use actix_web::web::Data; use actix_web::; use serde::Serialize; use std::future::{ready, Ready};

fn dummypermissioncheck( req: &HttpRequest, payload: &mut Payload, ) -> Ready> { let checkerservice: Option<&Data> = req.appdata::>(); ready(Ok(checkerservice.unwrap().check(req.query_string()))) }

fn anotherdummypermissioncheck( req: &HttpRequest, _payload: &mut Payload, ) -> Ready> { // Unecessary complicating permission check to show what it can do. // You have access to request, payload, and all injected dependencies through appdata. let checkerservice: Option<&Data> = req.appdata::>(); // TODO: do not unwrap here ready(Ok(checkerservice.unwrap().check(req.querystring()))) }

struct DummyService;

impl DummyService { pub fn check(&self, value: &str) -> bool { value.contains('q') } }

async fn index() -> Result { Ok("Hi there!".to_string()) }

[actix_web::main]

async fn main() -> std::io::Result<()> { HttpServer::new(|| { App::new() .appdata(Data::new(DummyService)) .service(web::scope("").route( "/", check( web::get(), with(dummypermissioncheck).and(anotherdummypermissioncheck), index, ), )) }) .bind("127.0.0.1:8888")? .run() .await } ```