Go to file
2022-09-02 17:32:57 +02:00
actix_admin_macros add macro version to cargo.toml 2022-09-02 17:32:57 +02:00
example update example to use in memory sqlite 2022-09-02 17:23:06 +02:00
src update readme.md 2022-09-02 17:28:10 +02:00
static add initial crate documentation 2022-09-02 17:06:13 +02:00
templates impl textarea 2022-08-20 23:31:45 +02:00
tests add initial crate documentation 2022-09-02 17:06:13 +02:00
.gitignore add vscode to gitignore 2022-08-28 20:27:11 +02:00
Cargo.toml add macro version to cargo.toml 2022-09-02 17:32:57 +02:00
README.md update readme.md 2022-09-02 17:28:10 +02:00

Actix Admin

The actix-admin crate aims at creating a web admin interface similar to other admin interfaces (such as flask-admin in python).

Getting Started

Features

  1. Async, builds on sea-orm for the database backend
  2. Macros, generate the required implementations for models automatically
  3. Authentication, optionally pass authentication handler to implement authentication for views
  4. Supports custom validation rules
  5. Searchable attributes can be specified
  6. Supports a custom index view

Screenshot

Quick overview

Required dependencies

itertools = "0.10.3"
sea-orm = { version = "^0.9.1", features = [ "sqlx-sqlite", "runtime-actix-native-tls", "macros" ], default-features = true }
actix_admin = { version = "^0.1.0" }

Derive Macros

use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};
use actix_admin::prelude::*;
use super::Post;

// Use DeriveActixAmin* Macros to implement the traits for the model
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Deserialize, Serialize, 
    DeriveActixAdmin, DeriveActixAdminModel, DeriveActixAdminViewModel
)]
#[sea_orm(table_name = "comment")]
pub struct Model {
    #[sea_orm(primary_key)]
    #[serde(skip_deserializing)]
    #[actix_admin(primary_key)]
    pub id: i32,
    pub comment: String
}

Add actix-admin to the AppState

pub struct AppState {
 pub db: DatabaseConnection,
 pub actix_admin: ActixAdmin,
}

impl ActixAdminAppDataTrait for AppState {
    fn get_db(&self) -> &DatabaseConnection {
        &self.db
    }

    fn get_actix_admin(&self) -> &ActixAdmin {
        &self.actix_admin
    }
}

Actix Admin Builder

pub fn create_actix_admin_builder() -> ActixAdminBuilder {
let comment_view_model = ActixAdminViewModel::from(Comment);
//!
let configuration = ActixAdminConfiguration {
   enable_auth: false,
   user_is_logged_in: None,
   login_link: None,
   logout_link: None,
};
//!
let mut admin_builder = ActixAdminBuilder::new(configuration);
admin_builder.add_entity::<AppState, Comment>(&comment_view_model);
//!
admin_builder
}

Add to the actix app

let actix_admin = create_actix_admin_builder().get_actix_admin();

let app_state = AppState {
    db: conn,
    actix_admin: actix_admin,
};

HttpServer::new(move || {
    App::new()
        .app_data(web::Data::new(app_state.clone()))
        .wrap(SessionMiddleware::new(CookieSessionStore::default(), cookie_secret_key.clone()))
        .route("/", web::get().to(index))
        .service(azure_auth.clone().create_scope::<AppState>())
        .service(
            create_actix_admin_builder().get_scope::<AppState>()
        )
        .wrap(middleware::Logger::default())
})

Access

The admin interface will be available under /admin/.