refactor: Enhance permission checks to accept both name and ID for Administrator role
This commit is contained in:
@@ -46,8 +46,11 @@ pub async fn permissions_guard(
|
|||||||
// Check permissions from database
|
// Check permissions from database
|
||||||
let user_permissions: Vec<String> = user.role.permissions.as_ref().unwrap_or(&vec![]).iter().filter_map(|p| p.as_ref().and_then(|pp| pp.name.clone())).collect();
|
let user_permissions: Vec<String> = user.role.permissions.as_ref().unwrap_or(&vec![]).iter().filter_map(|p| p.as_ref().and_then(|pp| pp.name.clone())).collect();
|
||||||
|
|
||||||
// If user has Administrator permission, allow all
|
// If user has Administrator permission, allow all.
|
||||||
if user_permissions.contains(&"Administrator".to_string()) {
|
// Accept either the permission name or the canonical permission id.
|
||||||
|
let admin_name = PermissionsEnum::Administrator.to_string();
|
||||||
|
let admin_id = PermissionsEnum::Administrator.id();
|
||||||
|
if user_permissions.contains(&admin_name) || user_permissions.contains(&admin_id) {
|
||||||
return Ok((claims, state));
|
return Ok((claims, state));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,10 +89,12 @@ where
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
let user_permissions: Vec<String> =
|
let user_permissions: Vec<String> =
|
||||||
user.role.permissions.as_ref().unwrap_or(&vec![]).iter().filter_map(|p| p.as_ref().and_then(|pp| pp.name.clone())).collect();
|
user.role.permissions.as_ref().unwrap_or(&vec![]).iter().filter_map(|p| p.as_ref().and_then(|pp| pp.name.clone())).collect();
|
||||||
|
|
||||||
// Check if user has Administrator permission - if yes, allow access to everything
|
// Check if user has Administrator permission - accept either the permission name or the well-known id
|
||||||
let has_administrator_permission = user_permissions.contains(&PermissionsEnum::Administrator.to_string());
|
let admin_name = PermissionsEnum::Administrator.to_string();
|
||||||
|
let admin_id = PermissionsEnum::Administrator.id();
|
||||||
|
let has_administrator_permission = user_permissions.contains(&admin_name) || user_permissions.contains(&admin_id);
|
||||||
let allowed = has_administrator_permission || permissions
|
let allowed = has_administrator_permission || permissions
|
||||||
.iter()
|
.iter()
|
||||||
.all(|p| user_permissions.contains(&p.to_string()));
|
.all(|p| user_permissions.contains(&p.to_string()));
|
||||||
|
|||||||
Reference in New Issue
Block a user