Change user role display to show names instead of ids

This commit is contained in:
Chris Jean-Marie 2024-10-07 18:56:26 +00:00
parent e7d0780b1b
commit f73b5c16b9
5 changed files with 31 additions and 9 deletions

View File

@ -9,5 +9,4 @@ INSERT INTO "main"."role_permissions" ("id", "created_at", "created_by", "update
INSERT INTO "main"."role_permissions" ("id", "created_at", "created_by", "updated_at", "updated_by", "role_id", "item") VALUES ('7', '0', '0', '0', '0', '4', '/users'); INSERT INTO "main"."role_permissions" ("id", "created_at", "created_by", "updated_at", "updated_by", "role_id", "item") VALUES ('7', '0', '0', '0', '0', '4', '/users');
-- First user is an admin -- First user is an admin
INSERT INTO "main"."user_roles" ("id", "created_at", "created_by", "updated_at", "updated_by", "user_id", "role_id") VALUES ('1', '1728247301', '0', '1728247301', '0', '1', '1');
INSERT INTO "main"."user_roles" ("id", "created_at", "created_by", "updated_at", "updated_by", "user_id", "role_id") VALUES ('2', '0', '0', '0', '0', '1', '4'); INSERT INTO "main"."user_roles" ("id", "created_at", "created_by", "updated_at", "updated_by", "user_id", "role_id") VALUES ('2', '0', '0', '0', '0', '1', '4');

View File

@ -37,10 +37,10 @@ async fn main() {
static MIGRATOR: Migrator = sqlx::migrate!(); static MIGRATOR: Migrator = sqlx::migrate!();
/* MIGRATOR MIGRATOR
.run(&app_state.db_pool) .run(&app_state.db_pool)
.await .await
.expect("Failed to run migrations"); */ .expect("Failed to run migrations");
let user_data: Option<UserData> = None; let user_data: Option<UserData> = None;

View File

@ -3,7 +3,7 @@ use axum::{extract::{Path, State}, response::{Html, IntoResponse, Redirect}, Ext
use http::StatusCode; use http::StatusCode;
use sqlx::SqlitePool; use sqlx::SqlitePool;
use crate::{middlewares::is_authorized, user::get_user_roles, UserData}; use crate::{middlewares::is_authorized, user::{get_user_roles, get_user_roles_display}, UserData};
#[derive(Template)] #[derive(Template)]
#[template(path = "profile.html")] #[template(path = "profile.html")]
@ -19,7 +19,7 @@ struct UserProfileTemplate {
logged_in: bool, logged_in: bool,
name: String, name: String,
user: UserData, user: UserData,
user_roles: Vec<crate::user::UserRoles> user_roles: Vec<crate::user::UserRolesDisplay>
} }
struct HtmlTemplate<T>(T); struct HtmlTemplate<T>(T);
@ -134,7 +134,7 @@ pub async fn profile(
if is_authorized("/users", user_data, db_pool.clone()).await { if is_authorized("/users", user_data, db_pool.clone()).await {
// Get user roles // Get user roles
let user_roles = get_user_roles(user_id, &db_pool.clone()).await; let user_roles = get_user_roles_display(user_id, &db_pool.clone()).await;
// Create the profile template. // Create the profile template.
let template = UserProfileTemplate { logged_in, name, user: user, user_roles }; let template = UserProfileTemplate { logged_in, name, user: user, user_roles };

View File

@ -37,6 +37,16 @@ pub struct UserRoles {
pub role_id: i64, pub role_id: i64,
} }
#[derive(Default, Clone, Debug, FromRow, Serialize, Deserialize)]
pub struct UserRolesDisplay {
pub id: i64,
pub created_at: i64,
pub created_by: i64,
pub updated_at: i64,
pub updated_by: i64,
pub role: String,
}
pub async fn get_user_roles(user_id: i64, db_pool: &SqlitePool) -> Vec<UserRoles> { pub async fn get_user_roles(user_id: i64, db_pool: &SqlitePool) -> Vec<UserRoles> {
// Get user roles // Get user roles
let user_roles = sqlx::query_as( let user_roles = sqlx::query_as(
@ -47,5 +57,18 @@ pub async fn get_user_roles(user_id: i64, db_pool: &SqlitePool) -> Vec<UserRoles
.await .await
.unwrap(); .unwrap();
user_roles
}
pub async fn get_user_roles_display(user_id: i64, db_pool: &SqlitePool) -> Vec<UserRolesDisplay> {
// Get user roles
let user_roles = sqlx::query_as(
r#"select r.id, r.name as role, r.created_at, r.created_by, r.updated_at, r.updated_by from roles r join user_roles ur on ur.role_id = r.id WHERE ur.user_id = ?"#
)
.bind(user_id)
.fetch_all(db_pool)
.await
.unwrap();
user_roles user_roles
} }

View File

@ -1,6 +1,6 @@
{% extends "authorized.html" %} {% extends "authorized.html" %}
{% block title %}User Profile{% endblock %} {% block title %}User Profile{% endblock %}
{% block content %} {% block center %}
<h1>User Profile</h1> <h1>User Profile</h1>
Full name: {{ user.name }}<br/> Full name: {{ user.name }}<br/>
Given name: {{ user.given_name }}<br/> Given name: {{ user.given_name }}<br/>
@ -19,9 +19,9 @@ Your email address: {{ user.email }}<br/>
{% for user_role in user_roles %} {% for user_role in user_roles %}
<tr> <tr>
<td><a href="/roles/{{ user_role.id }}">{{ user_role.id }}</a></td> <td><a href="/roles/{{ user_role.id }}">{{ user_role.id }}</a></td>
<td>{{ user_role.role_id }}</td> <td>{{ user_role.role }}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{% endblock %} {% endblock center %}