Make auth-info endpoint machine readable

This commit is contained in:
Simon Goller 2024-06-05 22:30:09 +02:00
parent e2f5b04ff1
commit 506791fa6a
7 changed files with 112 additions and 36 deletions

View file

@ -1,7 +1,7 @@
use std::sync::Arc;
use async_trait::async_trait;
use dao::DaoError;
use dao::{DaoError, PrivilegeEntity};
use sqlx::{query, query_as, SqlitePool};
pub mod booking;
@ -211,4 +211,21 @@ impl dao::PermissionDao for PermissionDaoImpl {
.map_db_error()?;
Ok(())
}
async fn privileges_for_user(&self, user: &str) -> Result<Arc<[PrivilegeEntity]>, DaoError> {
Ok(
query_as!(PrivilegeEntity, r"SELECT privilege.name FROM user
INNER JOIN user_role ON user.name = user_role.user_name
INNER JOIN role ON user_role.role_name = role.name
INNER JOIN role_privilege ON role.name = role_privilege.role_name
INNER JOIN privilege ON role_privilege.privilege_name = privilege.name
WHERE user.name = ?",
user
)
.fetch_all(self.pool.as_ref())
.await
.map(Arc::<[PrivilegeEntity]>::from)
.map_db_error()?,
)
}
}