Index: jobvista-frontend/src/redux/actionTypes.js
===================================================================
--- jobvista-frontend/src/redux/actionTypes.js	(revision 28b3398dcd7f9cfd044c2cb7923434b06037fee2)
+++ jobvista-frontend/src/redux/actionTypes.js	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
@@ -18,3 +18,6 @@
 export const DOWNLOAD_RESUME = "DOWNLOAD_RESUME"
 
+export const FETCH_RECRUITERS = "FETCH_RECRUITERS"
+export const CHANGE_ACCESS = "CHANGE_ACCESS"
 
+
Index: jobvista-frontend/src/redux/actions/adminActions.js
===================================================================
--- jobvista-frontend/src/redux/actions/adminActions.js	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
+++ jobvista-frontend/src/redux/actions/adminActions.js	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
@@ -0,0 +1,36 @@
+import axios from "../../axios/axiosInstance";
+import {CHANGE_ACCESS, FETCH_RECRUITERS} from "../actionTypes";
+
+export const AdminActions = {
+    fetchRecruiters: (callback) => {
+        return dispatch => {
+            axios.get("/admin/recruiters")
+                .then(response => {
+                dispatch({
+                    type: FETCH_RECRUITERS,
+                    recruiters: response.data
+                })
+                callback(true, response)
+            }).catch((error) => {
+                callback(false, error)
+            })
+        }
+    },
+    changeAccess: (recruiterId, access, callback) => {
+        return dispatch => {
+            axios.post("/admin/change-access/" + recruiterId, access, {
+                headers: {
+                    'Content-Type': 'application/json'
+                }
+            }).then(response => {
+                dispatch({
+                    type: CHANGE_ACCESS,
+                    recruiter: response.data
+                })
+                callback(true, response)
+            }).catch((error) => {
+                callback(false, error)
+            })
+        }
+    }
+}
Index: jobvista-frontend/src/redux/actions/authActions.js
===================================================================
--- jobvista-frontend/src/redux/actions/authActions.js	(revision 28b3398dcd7f9cfd044c2cb7923434b06037fee2)
+++ jobvista-frontend/src/redux/actions/authActions.js	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
@@ -48,5 +48,6 @@
                     email: response.email,
                     name: response.name,
-                    role: response.role
+                    role: response.role,
+                    access: response.hasAccess,
                 };
                 dispatch({
Index: jobvista-frontend/src/redux/reducers/adminReducer.js
===================================================================
--- jobvista-frontend/src/redux/reducers/adminReducer.js	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
+++ jobvista-frontend/src/redux/reducers/adminReducer.js	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
@@ -0,0 +1,31 @@
+import {CHANGE_ACCESS, FETCH_RECRUITERS} from "../actionTypes";
+import {sortElementsBy} from "../../utils/utils";
+
+const initialState = {
+    recruiters: [],
+}
+
+const AdminReducer = (state = initialState, action) => {
+    switch (action.type) {
+        case FETCH_RECRUITERS:
+            return {
+                ...state,
+                recruiters: sortElementsBy(action.recruiters, "registeredOn")
+            }
+        case CHANGE_ACCESS:
+            return {
+                ...state,
+                recruiters: state.recruiters.map(recruiter =>
+                recruiter.id === action.recruiter.id ?
+                    {...recruiter, hasAccess: action.recruiter.hasAccess} :
+                    recruiter
+                )
+            }
+        default:
+            return {
+                ...state,
+            };
+    }
+}
+
+export default AdminReducer
Index: jobvista-frontend/src/redux/reducers/jobAdvertisementReducer.js
===================================================================
--- jobvista-frontend/src/redux/reducers/jobAdvertisementReducer.js	(revision 28b3398dcd7f9cfd044c2cb7923434b06037fee2)
+++ jobvista-frontend/src/redux/reducers/jobAdvertisementReducer.js	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
@@ -5,5 +5,5 @@
     FETCH_JOB_ADVERTISEMENTS_BY_RECRUITER, FILTER_JOB_ADVERTISEMENTS, FILTER_JOB_ADVERTISEMENTS_BY_RECRUITER
 } from "../actionTypes";
-import {sortElementsByDateCreated} from "../../utils/utils";
+import {sortElementsBy} from "../../utils/utils";
 import {useSelector} from "react-redux";
 
@@ -22,6 +22,6 @@
             return {
                 ...state,
-                jobAdvertisements: sortElementsByDateCreated([...state.jobAdvertisements, action.jobAdvertisement]),
-                jobAdvertisementsByRecruiter: sortElementsByDateCreated([...state.jobAdvertisementsByRecruiter, action.jobAdvertisement])
+                jobAdvertisements: sortElementsBy([...state.jobAdvertisements, action.jobAdvertisement]),
+                jobAdvertisementsByRecruiter: sortElementsBy([...state.jobAdvertisementsByRecruiter, action.jobAdvertisement], "postedOn")
             }
         case EDIT_JOB_ADVERTISEMENT:
@@ -30,6 +30,6 @@
 
             return {
-                jobAdvertisements: sortElementsByDateCreated([...jobAdvertisements, action.jobAdvertisement]),
-                jobAdvertisementsByRecruiter: sortElementsByDateCreated([...jobAdvertisementsByRecruiter, action.jobAdvertisement])
+                jobAdvertisements: sortElementsBy([...jobAdvertisements, action.jobAdvertisement], "postedOn"),
+                jobAdvertisementsByRecruiter: sortElementsBy([...jobAdvertisementsByRecruiter, action.jobAdvertisement], "postedOn")
             }
         case DELETE_JOB_ADVERTISEMENT:
@@ -38,6 +38,6 @@
 
             return {
-                jobAdvertisements: sortElementsByDateCreated([...jobAdvertisements]),
-                jobAdvertisementsByRecruiter: sortElementsByDateCreated([...jobAdvertisementsByRecruiter])
+                jobAdvertisements: sortElementsBy([...jobAdvertisements], "postedOn"),
+                jobAdvertisementsByRecruiter: sortElementsBy([...jobAdvertisementsByRecruiter], "postedOn")
             }
 
@@ -45,5 +45,5 @@
             return {
                 ...state,
-                jobAdvertisements: sortElementsByDateCreated(action.jobAdvertisements)
+                jobAdvertisements: sortElementsBy(action.jobAdvertisements, "postedOn")
             }
 
@@ -52,5 +52,5 @@
             return {
                 ...state,
-                jobAdvertisementsByRecruiter: sortElementsByDateCreated(action.jobAdvertisementsByRecruiter)
+                jobAdvertisementsByRecruiter: sortElementsBy(action.jobAdvertisementsByRecruiter, "postedOn")
             }
 
Index: jobvista-frontend/src/redux/store.js
===================================================================
--- jobvista-frontend/src/redux/store.js	(revision 28b3398dcd7f9cfd044c2cb7923434b06037fee2)
+++ jobvista-frontend/src/redux/store.js	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
@@ -4,4 +4,6 @@
 import jobAdReducer from "./reducers/jobAdvertisementReducer";
 import applicationReducer from "./reducers/applicationReducer"
+import adminReducer from "./reducers/adminReducer"
+import {AdminActions} from "./actions/adminActions";
 
 // const rootReducer = combineReducers({
@@ -18,5 +20,6 @@
         auth: authReducer,
         jobAd: jobAdReducer,
-        appl: applicationReducer
+        appl: applicationReducer,
+        admin: adminReducer
     },
 });
