From ba2bb90852dedf9f4d58ecb758d4bd3057a86a9c Mon Sep 17 00:00:00 2001 From: Philippe Loctaux Date: Mon, 8 May 2023 17:57:56 +0200 Subject: [PATCH] permissions: add/remove/view for roles --- crates/ezidam/src/page.rs | 10 ++ crates/ezidam/src/routes/admin.rs | 21 +++ crates/ezidam/src/routes/admin/permissions.rs | 167 ++++++++++++++++++ .../admin/permissions/for-role.html.tera | 120 +++++++++++++ .../pages/admin/permissions/roles.html.tera | 51 ++++++ 5 files changed, 369 insertions(+) create mode 100644 crates/ezidam/templates/pages/admin/permissions/for-role.html.tera create mode 100644 crates/ezidam/templates/pages/admin/permissions/roles.html.tera diff --git a/crates/ezidam/src/page.rs b/crates/ezidam/src/page.rs index df53cce..ec24123 100644 --- a/crates/ezidam/src/page.rs +++ b/crates/ezidam/src/page.rs @@ -38,6 +38,8 @@ pub enum Page { AdminPermissionsHome(AdminPermissionsHome), AdminPermissionsUsers(AdminPermissionsUsers), AdminPermissionsForUser(AdminPermissionsForUser), + AdminPermissionsRoles(AdminPermissionsRoles), + AdminPermissionsForRole(AdminPermissionsForRole), } impl Page { @@ -72,6 +74,8 @@ impl Page { Page::AdminPermissionsHome(_) => "pages/admin/permissions/home", Page::AdminPermissionsUsers(_) => "pages/admin/permissions/users", Page::AdminPermissionsForUser(_) => "pages/admin/permissions/for-user", + Page::AdminPermissionsRoles(_) => "pages/admin/permissions/roles", + Page::AdminPermissionsForRole(_) => "pages/admin/permissions/for-role", } } @@ -106,6 +110,8 @@ impl Page { Page::AdminPermissionsHome(_) => "Permissions", Page::AdminPermissionsUsers(_) => "Users permissions", Page::AdminPermissionsForUser(_) => "Permissions for user", + Page::AdminPermissionsRoles(_) => "Roles permissions", + Page::AdminPermissionsForRole(_) => "Permissions for role", } } @@ -142,6 +148,8 @@ impl Page { Page::AdminPermissionsHome(_) => Some(AdminMenu::Permissions.into()), Page::AdminPermissionsUsers(_) => Some(AdminMenu::Permissions.into()), Page::AdminPermissionsForUser(_) => Some(AdminMenu::Permissions.into()), + Page::AdminPermissionsRoles(_) => Some(AdminMenu::Permissions.into()), + Page::AdminPermissionsForRole(_) => Some(AdminMenu::Permissions.into()), } } @@ -176,6 +184,8 @@ impl Page { Page::AdminPermissionsHome(home) => Box::new(home), Page::AdminPermissionsUsers(users) => Box::new(users), Page::AdminPermissionsForUser(user) => Box::new(user), + Page::AdminPermissionsRoles(roles) => Box::new(roles), + Page::AdminPermissionsForRole(role) => Box::new(role), } } } diff --git a/crates/ezidam/src/routes/admin.rs b/crates/ezidam/src/routes/admin.rs index e82466c..e4fac3d 100644 --- a/crates/ezidam/src/routes/admin.rs +++ b/crates/ezidam/src/routes/admin.rs @@ -49,11 +49,15 @@ pub fn routes() -> Vec { admin_permissions_users, admin_permissions_for_user, admin_permissions_for_user_form, + admin_permissions_roles, + admin_permissions_for_role, + admin_permissions_for_role_form, ] } pub mod content { use super::RolePermission; + use super::UserPermission; use apps::App; use jwt::JwtClaims; use rocket::serde::Serialize; @@ -186,4 +190,21 @@ pub mod content { pub local: User, pub roles_permissions: Vec, } + + #[derive(Serialize)] + #[serde(crate = "rocket::serde")] + #[derive(Clone)] + pub struct AdminPermissionsRoles { + pub user: JwtClaims, + pub roles: Vec, + } + + #[derive(Serialize)] + #[serde(crate = "rocket::serde")] + #[derive(Clone)] + pub struct AdminPermissionsForRole { + pub user: JwtClaims, + pub role: Role, + pub users_permissions: Vec, + } } diff --git a/crates/ezidam/src/routes/admin/permissions.rs b/crates/ezidam/src/routes/admin/permissions.rs index b413e56..5d852f7 100644 --- a/crates/ezidam/src/routes/admin/permissions.rs +++ b/crates/ezidam/src/routes/admin/permissions.rs @@ -191,3 +191,170 @@ pub async fn admin_permissions_for_user_form( ), )) } + +#[get("/admin/permissions/roles")] +pub async fn admin_permissions_roles( + mut db: Connection, + admin: JwtAdmin, + flash: Option>, +) -> Result