feat: Introduce Administrator permission and update permissions checks for access control

This commit is contained in:
MythEclipse
2025-09-25 23:47:29 +07:00
parent 012aff60ef
commit ff2e14d5f9
3 changed files with 9 additions and 40 deletions
@@ -28,45 +28,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
( (
"f6b03f25-e416-4893-ac88-caaa690afb07", "f6b03f25-e416-4893-ac88-caaa690afb07",
vec![ vec![
PermissionsEnum::ReadListUsers, // Only Administrator permission - grants access to everything
PermissionsEnum::ReadDetailUsers, PermissionsEnum::Administrator,
PermissionsEnum::CreateUsers,
PermissionsEnum::DeleteUsers,
PermissionsEnum::UpdateUsers,
PermissionsEnum::ActivateUsers,
// Full admin permissions
PermissionsEnum::ManageAllUsers,
PermissionsEnum::ManageAllRoles,
PermissionsEnum::ManageAllPermissions,
PermissionsEnum::ManageAllTeams,
PermissionsEnum::ViewAllSensitiveData,
PermissionsEnum::AccessAdminDashboard,
PermissionsEnum::ReadListRoles,
PermissionsEnum::ReadDetailRoles,
PermissionsEnum::CreateRoles,
PermissionsEnum::DeleteRoles,
PermissionsEnum::UpdateRoles,
PermissionsEnum::ReadListPermissions,
PermissionsEnum::ReadDetailPermissions,
PermissionsEnum::CreatePermissions,
PermissionsEnum::DeletePermissions,
PermissionsEnum::UpdatePermissions,
PermissionsEnum::CreateGachaClaims,
PermissionsEnum::ReadDetailGachaClaims,
PermissionsEnum::ReadListGachaItems,
PermissionsEnum::ReadDetailGachaItems,
PermissionsEnum::CreateGachaItems,
PermissionsEnum::DeleteGachaItems,
PermissionsEnum::UpdateGachaItems,
PermissionsEnum::ReadDetailGachaRolls,
PermissionsEnum::CreateGachaRolls,
PermissionsEnum::ExecuteGachaRolls,
PermissionsEnum::ReadListMentors,
PermissionsEnum::ReadDetailMentors,
PermissionsEnum::RegisterMentors,
PermissionsEnum::UpdateMentors,
PermissionsEnum::VerifyMentors,
PermissionsEnum::DeleteMentors,
], ],
), ),
( (
@@ -123,6 +123,7 @@ impl fmt::Display for PermissionsEnum {
PermissionsEnum::ManageAllTeams => "Manage All Teams", PermissionsEnum::ManageAllTeams => "Manage All Teams",
PermissionsEnum::ViewAllSensitiveData => "View All Sensitive Data", PermissionsEnum::ViewAllSensitiveData => "View All Sensitive Data",
PermissionsEnum::AccessAdminDashboard => "Access Admin Dashboard", PermissionsEnum::AccessAdminDashboard => "Access Admin Dashboard",
PermissionsEnum::Administrator => "Administrator",
}; };
write!(f, "{permission_str}") write!(f, "{permission_str}")
} }
@@ -188,6 +189,7 @@ impl PermissionsEnum {
PermissionsEnum::ManageAllTeams => "a3b4c5d6-7890-1234-5678-3456789012ab".to_string(), PermissionsEnum::ManageAllTeams => "a3b4c5d6-7890-1234-5678-3456789012ab".to_string(),
PermissionsEnum::ViewAllSensitiveData => "b4c5d6e7-8901-2345-6789-4567890123ab".to_string(), PermissionsEnum::ViewAllSensitiveData => "b4c5d6e7-8901-2345-6789-4567890123ab".to_string(),
PermissionsEnum::AccessAdminDashboard => "c5d6e7f8-9012-3456-7890-5678901234ab".to_string(), PermissionsEnum::AccessAdminDashboard => "c5d6e7f8-9012-3456-7890-5678901234ab".to_string(),
PermissionsEnum::Administrator => "administrator-permission-id-123456789".to_string(),
} }
} }
@@ -256,6 +258,7 @@ impl PermissionsEnum {
PermissionsEnum::ManageAllTeams, PermissionsEnum::ManageAllTeams,
PermissionsEnum::ViewAllSensitiveData, PermissionsEnum::ViewAllSensitiveData,
PermissionsEnum::AccessAdminDashboard, PermissionsEnum::AccessAdminDashboard,
PermissionsEnum::Administrator,
] ]
} }
} }
@@ -89,7 +89,10 @@ where
}; };
let user_permissions: Vec<String> = let user_permissions: Vec<String> =
user.role.permissions.into_iter().map(|p| p.name).collect(); user.role.permissions.into_iter().map(|p| p.name).collect();
let allowed = permissions
// Check if user has Administrator permission - if yes, allow access to everything
let has_administrator_permission = user_permissions.contains(&PermissionsEnum::Administrator.to_string());
let allowed = has_administrator_permission || permissions
.iter() .iter()
.all(|p| user_permissions.contains(&p.to_string())); .all(|p| user_permissions.contains(&p.to_string()));
if !allowed { if !allowed {