feat: Simplify token generation by removing unnecessary permissions parameter from access and refresh token functions
This commit is contained in:
@@ -1,11 +1,10 @@
|
||||
use super::PermissionsEnum;
|
||||
use crate::{AppState, common_response, decode_access_token};
|
||||
use crate::{AppState, common_response, decode_access_token, UsersRepository};
|
||||
use axum::{
|
||||
http::{HeaderMap, StatusCode},
|
||||
response::Response, Extension,
|
||||
};
|
||||
use axum_extra::headers::{authorization::Bearer, Authorization, HeaderMapExt};
|
||||
// Removed imphnen_utils::make_thing as it's no longer needed here
|
||||
|
||||
pub async fn permissions_guard(
|
||||
headers: HeaderMap,
|
||||
@@ -32,10 +31,23 @@ pub async fn permissions_guard(
|
||||
})?
|
||||
.claims;
|
||||
|
||||
// Use permissions from JWT for the check
|
||||
// Fetch user from database to get permissions
|
||||
let user_repo = UsersRepository::new(&state);
|
||||
let user = match user_repo.query_user_by_email(claims.sub.clone()).await {
|
||||
Ok(user) => user,
|
||||
Err(_) => {
|
||||
return Err(common_response(
|
||||
StatusCode::UNAUTHORIZED,
|
||||
"User not found",
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
// Check permissions from database
|
||||
let user_permissions: Vec<String> = user.role.permissions.iter().map(|p| p.name.clone()).collect();
|
||||
for required in &required_permissions {
|
||||
let required_str = required.to_string();
|
||||
if !claims.permissions.contains(&required_str) {
|
||||
if !user_permissions.contains(&required_str) {
|
||||
eprintln!(" MISSING REQUIRED PERMISSION: {required_str}");
|
||||
return Err(common_response(
|
||||
StatusCode::FORBIDDEN,
|
||||
|
||||
Reference in New Issue
Block a user