diff --git a/crates/ezidam/src/page.rs b/crates/ezidam/src/page.rs index 71d531f..0f83e7c 100644 --- a/crates/ezidam/src/page.rs +++ b/crates/ezidam/src/page.rs @@ -33,6 +33,7 @@ pub enum Page { AdminUsersView(AdminUsersView), AdminUsersNew(AdminUsersNew), AdminRolesList(AdminRolesList), + AdminRolesNew(AdminRolesNew), } impl Page { @@ -62,6 +63,7 @@ impl Page { Page::AdminUsersView(_) => "pages/admin/users/view", Page::AdminUsersNew(_) => "pages/admin/users/new", Page::AdminRolesList(_) => "pages/admin/roles/list", + Page::AdminRolesNew(_) => "pages/admin/roles/new", } } @@ -91,6 +93,7 @@ impl Page { Page::AdminUsersView(_) => "User info", Page::AdminUsersNew(_) => "New user", Page::AdminRolesList(_) => "Roles", + Page::AdminRolesNew(_) => "New role", } } @@ -122,6 +125,7 @@ impl Page { Page::AdminUsersView(_) => Some(AdminMenu::Users.into()), Page::AdminUsersNew(_) => Some(AdminMenu::Users.into()), Page::AdminRolesList(_) => Some(AdminMenu::Roles.into()), + Page::AdminRolesNew(_) => Some(AdminMenu::Roles.into()), } } @@ -151,6 +155,7 @@ impl Page { Page::AdminUsersView(view) => Box::new(view), Page::AdminUsersNew(new) => Box::new(new), Page::AdminRolesList(list) => Box::new(list), + Page::AdminRolesNew(new) => Box::new(new), } } } diff --git a/crates/ezidam/src/routes/admin.rs b/crates/ezidam/src/routes/admin.rs index 5d90582..481cbb7 100644 --- a/crates/ezidam/src/routes/admin.rs +++ b/crates/ezidam/src/routes/admin.rs @@ -38,6 +38,8 @@ pub fn routes() -> Vec { admin_users_totp_backup_delete, admin_users_info_update, admin_roles_list, + admin_roles_new, + admin_roles_new_form, ] } @@ -134,4 +136,11 @@ pub mod content { pub user: JwtClaims, pub roles: Vec, } + + #[derive(Serialize)] + #[serde(crate = "rocket::serde")] + #[derive(Clone)] + pub struct AdminRolesNew { + pub user: JwtClaims, + } } diff --git a/crates/ezidam/src/routes/admin/roles.rs b/crates/ezidam/src/routes/admin/roles.rs index 70da22b..ebefb8a 100644 --- a/crates/ezidam/src/routes/admin/roles.rs +++ b/crates/ezidam/src/routes/admin/roles.rs @@ -1,6 +1,7 @@ use crate::routes::prelude::*; use rocket::{get, post}; use roles::Role; +use std::str::FromStr; #[get("/admin/roles")] pub async fn admin_roles_list( @@ -23,3 +24,56 @@ pub async fn admin_roles_list( .map(|flash| Page::with_flash(page.clone(), flash)) .unwrap_or_else(|| page.into())) } + +#[get("/admin/roles/new")] +pub async fn admin_roles_new(admin: JwtAdmin, flash: Option>) -> Result