# ane-admin **Repository Path**: hx-studio/aneadmin ## Basic Information - **Project Name**: ane-admin - **Description**: 基于rust axum开发的后台管理框架 - **Primary Language**: Rust - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-11-17 - **Last Updated**: 2024-11-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Ane Admin 使用rust开发的后台管理系统 ## 演示地址 预览: 用户:demo 密码:123456 ## 后端技术 - axum: web框架 - sea-orm: 数据库的orm - casbin: 权限验证 - validator: 数据验证 - tera: jinja2模板 ## 后端目录说明 - ane_cms 定义cms应用的orm - ane_system [定义用户数据的orm](./ane_system/README.md) - ane_core [web服务的接口](./ane_core/README.md) - ane_macros 宏定义 - ane_config 项目配置文件的定义 - example 基于ane_core实现的具体服务 ## 快速使用 ### 1.导入依赖 ```toml [dependencies] ane_cms = { git = "https://gitee.com/krealseu/aneadmin"} ane_config = { git = "https://gitee.com/krealseu/aneadmin"} loginmanager = { version = "^0.2.4" } tokio = { version = "^1", features = ["full", "rt-multi-thread"] } ``` ### 2.构建路由 ```rust use ane_core::middleware::casbin_middleware; use ane_core::security::{AneBackend, LoginUser}; use ane_core::AppState; use axum::{Extension, Router}; #[tokio::main] async fn main() { // 加载配置文件 let cnf = ane_core::load_config("config_file_path"); let app_state = AppState::from_config(&cnf).await; // 初始化数据库 // ane_core::init_db(&app_state.db()).await; let decoder = ane_core::security::AneBackend::new(app_state.clone()); let loginmanager = loginmanager::LoginManager::new(decoder) .login_view(cnf.loginmanager.login_view) .redirect(cnf.loginmanager.redirect); // 构建app,可根据需求添加路由 let app = Router::new() .merge(controller::system::get_route("/api/system")) // ↑↑↑ 以上服务需要通过casbin请求判断 .route_layer(axum::middleware::from_fn(casbin_middleware)) .merge(controller::account::get_route("/api/account")) // ↑↑↑ 以上服务需要用户登陆才能访问 // 认证登陆相关的api .route_layer(axum::middleware::from_extractor::>()) // 用户登陆相关的api .merge(controller::auth::get_route("/auth")) .layer(loginmanager) .layer(Extension(app_state.clone())); // 启动服务 let tcp_listener = tokio::net::TcpListener::bind(&cnf.web.addr).await.unwrap(); axum::serve(tcp_listener,app.into_make_service_with_connect_info::()) .await .unwrap(); } ``` ### 3.自定义接口使用权限 ```rust use ane_core::security::LoginUser; pub async fn test_api( user: LoginUser ) -> AppResult { // user是当前通过验证的登陆用户,user.roles可以读取该用户通过验证的role // 即当前用户可以使用什么role来访问该接口 todo!() } ``` ### 4.使用案例 - [web](./example/web) ## 前端