Fixed authentication redirect upon signin using states

Finally fixed dashboard defaults for new user signups
This commit is contained in:
Muhammad Ibrahim
2025-09-24 07:42:15 +01:00
parent 73761d8927
commit 99aa79a6a4
4 changed files with 31 additions and 23 deletions

View File

@@ -57,30 +57,33 @@ async function createDefaultDashboardPreferences(userId, userRole = 'user') {
const permissions = await getUserPermissions(userRole); const permissions = await getUserPermissions(userRole);
// Define all possible dashboard cards with their required permissions // Define all possible dashboard cards with their required permissions
// Order aligned with preferred layout
const allCards = [ const allCards = [
// Host-related cards // Host-related cards
{ cardId: 'totalHosts', requiredPermission: 'can_view_hosts', order: 0 }, { cardId: 'totalHosts', requiredPermission: 'can_view_hosts', order: 0 },
{ cardId: 'hostsNeedingUpdates', requiredPermission: 'can_view_hosts', order: 1 }, { cardId: 'hostsNeedingUpdates', requiredPermission: 'can_view_hosts', order: 1 },
{ cardId: 'upToDateHosts', requiredPermission: 'can_view_hosts', order: 2 },
{ cardId: 'totalHostGroups', requiredPermission: 'can_view_hosts', order: 3 },
// Package-related cards // Package-related cards
{ cardId: 'totalOutdatedPackages', requiredPermission: 'can_view_packages', order: 4 }, { cardId: 'totalOutdatedPackages', requiredPermission: 'can_view_packages', order: 2 },
{ cardId: 'securityUpdates', requiredPermission: 'can_view_packages', order: 5 }, { cardId: 'securityUpdates', requiredPermission: 'can_view_packages', order: 3 },
{ cardId: 'packagePriority', requiredPermission: 'can_view_packages', order: 6 },
// Host-related cards (continued)
{ cardId: 'totalHostGroups', requiredPermission: 'can_view_hosts', order: 4 },
{ cardId: 'upToDateHosts', requiredPermission: 'can_view_hosts', order: 5 },
// Repository-related cards // Repository-related cards
{ cardId: 'totalRepos', requiredPermission: 'can_view_hosts', order: 7 }, // Repos are host-related { cardId: 'totalRepos', requiredPermission: 'can_view_hosts', order: 6 },
// User management cards (admin only) // User management cards (admin only)
{ cardId: 'totalUsers', requiredPermission: 'can_view_users', order: 8 }, { cardId: 'totalUsers', requiredPermission: 'can_view_users', order: 7 },
{ cardId: 'recentUsers', requiredPermission: 'can_view_users', order: 9 },
// System/Report cards // System/Report cards
{ cardId: 'osDistribution', requiredPermission: 'can_view_reports', order: 10 }, { cardId: 'osDistribution', requiredPermission: 'can_view_reports', order: 8 },
{ cardId: 'osDistributionBar', requiredPermission: 'can_view_reports', order: 11 }, { cardId: 'osDistributionBar', requiredPermission: 'can_view_reports', order: 9 },
{ cardId: 'updateStatus', requiredPermission: 'can_view_reports', order: 12 }, { cardId: 'recentCollection', requiredPermission: 'can_view_hosts', order: 10 },
{ cardId: 'recentCollection', requiredPermission: 'can_view_hosts', order: 13 }, // Collection is host-related { cardId: 'updateStatus', requiredPermission: 'can_view_reports', order: 11 },
{ cardId: 'packagePriority', requiredPermission: 'can_view_packages', order: 12 },
{ cardId: 'recentUsers', requiredPermission: 'can_view_users', order: 13 },
{ cardId: 'quickStats', requiredPermission: 'can_view_dashboard', order: 14 } { cardId: 'quickStats', requiredPermission: 'can_view_dashboard', order: 14 }
]; ];
@@ -174,7 +177,6 @@ router.put('/', authenticateToken, [
// Get default dashboard card configuration // Get default dashboard card configuration
router.get('/defaults', authenticateToken, async (req, res) => { router.get('/defaults', authenticateToken, async (req, res) => {
try { try {
// Default configuration based on iby's (Muhammad Ibrahim) preferred layout
// This provides a comprehensive dashboard view for all new users // This provides a comprehensive dashboard view for all new users
const defaultCards = [ const defaultCards = [
{ cardId: 'totalHosts', title: 'Total Hosts', icon: 'Server', enabled: true, order: 0 }, { cardId: 'totalHosts', title: 'Total Hosts', icon: 'Server', enabled: true, order: 0 },
@@ -182,7 +184,7 @@ router.get('/defaults', authenticateToken, async (req, res) => {
{ cardId: 'totalOutdatedPackages', title: 'Outdated Packages', icon: 'Package', enabled: true, order: 2 }, { cardId: 'totalOutdatedPackages', title: 'Outdated Packages', icon: 'Package', enabled: true, order: 2 },
{ cardId: 'securityUpdates', title: 'Security Updates', icon: 'Shield', enabled: true, order: 3 }, { cardId: 'securityUpdates', title: 'Security Updates', icon: 'Shield', enabled: true, order: 3 },
{ cardId: 'totalHostGroups', title: 'Host Groups', icon: 'Folder', enabled: true, order: 4 }, { cardId: 'totalHostGroups', title: 'Host Groups', icon: 'Folder', enabled: true, order: 4 },
{ cardId: 'upToDateHosts', title: 'Up to date', icon: 'CheckCircle', enabled: true, order: 5 }, { cardId: 'hostsNeedingUpdates', title: 'Up to date', icon: 'CheckCircle', enabled: true, order: 5 },
{ cardId: 'totalRepos', title: 'Repositories', icon: 'GitBranch', enabled: true, order: 6 }, { cardId: 'totalRepos', title: 'Repositories', icon: 'GitBranch', enabled: true, order: 6 },
{ cardId: 'totalUsers', title: 'Users', icon: 'Users', enabled: true, order: 7 }, { cardId: 'totalUsers', title: 'Users', icon: 'Users', enabled: true, order: 7 },
{ cardId: 'osDistribution', title: 'OS Distribution', icon: 'BarChart3', enabled: true, order: 8 }, { cardId: 'osDistribution', title: 'OS Distribution', icon: 'BarChart3', enabled: true, order: 8 },

View File

@@ -666,7 +666,6 @@ async function getPermissionBasedPreferences(userRole) {
const permissions = await getUserPermissions(userRole); const permissions = await getUserPermissions(userRole);
// Define all possible dashboard cards with their required permissions // Define all possible dashboard cards with their required permissions
// Order matches iby's (Muhammad Ibrahim) preferred layout
const allCards = [ const allCards = [
// Host-related cards // Host-related cards
{ cardId: 'totalHosts', requiredPermission: 'can_view_hosts', order: 0 }, { cardId: 'totalHosts', requiredPermission: 'can_view_hosts', order: 0 },

View File

@@ -255,6 +255,13 @@ export const AuthProvider = ({ children }) => {
} }
}, [token, user, checkAdminUsersExist]) }, [token, user, checkAdminUsersExist])
const setAuthState = (authToken, authUser) => {
setToken(authToken)
setUser(authUser)
localStorage.setItem('token', authToken)
localStorage.setItem('user', JSON.stringify(authUser))
}
const value = { const value = {
user, user,
token, token,
@@ -267,6 +274,7 @@ export const AuthProvider = ({ children }) => {
updateProfile, updateProfile,
changePassword, changePassword,
refreshPermissions, refreshPermissions,
setAuthState,
isAuthenticated, isAuthenticated,
isAdmin, isAdmin,
hasPermission, hasPermission,

View File

@@ -24,7 +24,7 @@ const Login = () => {
const [signupEnabled, setSignupEnabled] = useState(false) const [signupEnabled, setSignupEnabled] = useState(false)
const navigate = useNavigate() const navigate = useNavigate()
const { login } = useAuth() const { login, setAuthState } = useAuth()
// Check if signup is enabled // Check if signup is enabled
useEffect(() => { useEffect(() => {
@@ -80,9 +80,8 @@ const Login = () => {
try { try {
const response = await authAPI.signup(formData.username, formData.email, formData.password, formData.firstName, formData.lastName) const response = await authAPI.signup(formData.username, formData.email, formData.password, formData.firstName, formData.lastName)
if (response.data && response.data.token) { if (response.data && response.data.token) {
// Store token and user data // Update AuthContext state and localStorage
localStorage.setItem('token', response.data.token) setAuthState(response.data.token, response.data.user)
localStorage.setItem('user', JSON.stringify(response.data.user))
// Redirect to dashboard // Redirect to dashboard
navigate('/') navigate('/')