1个不稳定版本
0.1.0 | 2021年5月16日 |
---|
#786 在 认证
9KB
115 行
Rocket Casbin中间件
安装
将其添加到 Cargo.toml
rocket-authz = "0.1.0"
需求
Casbin仅负责权限控制,因此您需要实现一个 Authentication Middleware
来识别用户。您需要通过一个 Authentication Middleware
将包含 subject
和 domain(可选) 的
rocket_authz::CasbinVals
放入 reqeust.local_cache()
。您可以在 示例 中看到使用 rocket-authz 的示例。
示例
#![feature(proc_macro_hygiene, decl_macro)]
use casbin::{DefaultModel, FileAdapter};
use rocket::{
fairing::{Fairing, Info, Kind},
get,
request::Request,
routes, Data,
};
use rocket_authz;
struct FakeAuthFairing;
impl Fairing for FakeAuthFairing {
fn info(&self) -> Info {
Info {
name: "Fake Auth Fairing",
kind: Kind::Request | Kind::Response,
}
}
fn on_request(&self, request: &mut Request, _data: &Data) {
request.local_cache(|| rocket_authz::CasbinVals::new(Some("alice".to_string()), None));
}
}
#[get("/data1")]
fn data1(_g: rocket_authz::CasbinGuard) -> &'static str {
"data1"
}
#[get("/data2")]
fn data2(_g: rocket_authz::CasbinGuard) -> &'static str {
"data2"
}
fn rocket() -> rocket::Rocket {
let rt = tokio::runtime::Runtime::new().unwrap();
let m = match rt.block_on(DefaultModel::from_file(
"examples/rbac_with_pattern_model.conf",
)) {
Ok(m) => m,
Err(_) => panic!(""),
};
let a = FileAdapter::new("examples/rbac_with_pattern_policy.csv");
let casbin_fairing = match rt.block_on(rocket_authz::CasbinFairing::new(m, a)) {
Ok(f) => f,
Err(_) => panic!(""),
};
let fake_auth_fairing = FakeAuthFairing;
rocket::ignite()
.attach(fake_auth_fairing)
.attach(casbin_fairing)
.mount("/", routes![data1, data2])
}
许可证
本项目遵循
- Apache许可证第2版,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
依赖项
~23–35MB
~562K SLoC