Start to build edit user form

This commit is contained in:
2022-04-07 17:04:05 +02:00
parent 587758f4ed
commit af903de7c2
6 changed files with 128 additions and 6 deletions

View File

@ -1,3 +1,5 @@
use std::ops::Deref;
use actix::Addr;
use actix_web::{HttpResponse, Responder, web};
use askama::Template;
@ -23,6 +25,14 @@ struct UsersListTemplate {
users: Vec<User>,
}
#[derive(Template)]
#[template(path = "settings/edit_user.html")]
struct EditUserTemplate {
_parent: BaseSettingsPage,
u: User,
clients: Vec<Client>,
}
pub async fn clients_route(user: CurrentUser, clients: web::Data<ClientManager>) -> impl Responder {
HttpResponse::Ok().body(ClientsListTemplate {
@ -48,4 +58,12 @@ pub async fn users_route(user: CurrentUser, users: web::Data<Addr<UsersActor>>)
),
users,
}.render().unwrap())
}
pub async fn create_user(user: CurrentUser, clients: web::Data<ClientManager>) -> impl Responder {
HttpResponse::Ok().body(EditUserTemplate {
_parent: BaseSettingsPage::get("Create a new user", user.deref(), None, None),
u: Default::default(),
clients: clients.cloned(),
}.render().unwrap())
}

View File

@ -1,6 +1,5 @@
pub mod app_config;
pub mod entity_manager;
pub mod service;
pub mod session_identity;
pub mod user;
pub mod client;

View File

@ -1,2 +0,0 @@
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, Eq)]
pub struct ServiceID(String);

View File

@ -1,5 +1,5 @@
use crate::data::client::ClientID;
use crate::data::entity_manager::EntityManager;
use crate::data::service::ServiceID;
use crate::utils::err::Res;
pub type UserID = String;
@ -18,10 +18,17 @@ pub struct User {
/// None = all services
/// Some([]) = no service
pub authorized_services: Option<Vec<ServiceID>>,
pub authorized_services: Option<Vec<ClientID>>,
}
impl User {
pub fn can_access_app(&self, id: &ClientID) -> bool {
match &self.authorized_services {
None => true,
Some(c) => c.contains(id)
}
}
pub fn verify_password<P: AsRef<[u8]>>(&self, pass: P) -> bool {
verify_password(pass, &self.password)
}
@ -47,7 +54,7 @@ impl Default for User {
need_reset_password: false,
enabled: true,
admin: false,
authorized_services: None,
authorized_services: Some(Vec::new()),
}
}
}

View File

@ -119,6 +119,7 @@ async fn main() -> std::io::Result<()> {
.to(|| async { HttpResponse::Found().append_header(("Location", "/settings")).finish() }))
.route("/admin/clients", web::get().to(admin_controller::clients_route))
.route("/admin/users", web::get().to(admin_controller::users_route))
.route("/admin/create_user", web::get().to(admin_controller::create_user))
})
.bind(listen_address)?
.run()