diff --git a/backend/config/app.config.js b/backend/config/app.config.js
index 6970701d800720b6ef086d7f798865b34a87b7e2..bfb56191aef46e819d558e23094578bbc137f074 100644
--- a/backend/config/app.config.js
+++ b/backend/config/app.config.js
@@ -1,5 +1,5 @@
 module.exports = {
     'secret': 'much-secret-such-key-wow',
     ROLEs: ['Master Admin Diskominfo', 'Admin Diskominfo', 'Admin Dinas', 'Member Dinas'],
-    jwtExpireTime: 300
+    jwtExpireTime: 3000
 };
\ No newline at end of file
diff --git a/backend/controller/userController.js b/backend/controller/userController.js
new file mode 100644
index 0000000000000000000000000000000000000000..ce694477cece99718ebc9843d2716e9d55a73f15
--- /dev/null
+++ b/backend/controller/userController.js
@@ -0,0 +1,120 @@
+const models = require('../models');
+const User = models.user;
+const Role = models.role;
+var bcrypt = require('bcryptjs');
+
+exports.fetchAll = (req, res) => {
+	User.findAll({
+		attributes: ['id', 'name'],
+		include: [{
+			model: Role, 
+			attributes: ['id', 'name']
+		}]
+	}).then(user => {
+		res.status(200).json({
+			"description": "Users data",
+			"users": user
+		})
+	}).catch(err => {
+		res.status(500).json({
+			"description": "Error",
+			"error": err
+		});
+	})
+}
+
+exports.createUser = (req, res) => {
+	User.create({
+        name: req.body.name, 
+        email: req.body.email,
+        username: req.body.username,
+        password: bcrypt.hashSync(req.body.password),
+    }).then(user => {
+        Role.findOne({
+            where: {
+                name: req.body.role
+            }
+        }).then(role => {
+            user.setRole(role).then(() => {
+    			res.send("User created successfully!");
+    		})
+    	}).catch(err => {
+    		res.status(500).send('Error -> ' + err);
+    	});
+    }).catch(err => {
+    	res.status(500).send('Error -> ' + err);
+    });
+}
+
+exports.editUser = (req, res) => {
+	User.findOne({
+		where: {
+			id: req.body.id
+		}
+	}).then(user => {
+		Role.findOne({
+			where: {
+				name: req.body.role
+			}
+		}).then(role => {
+			user.setRole(role).then(() => {
+				user.update(
+					{
+						name: req.body.name,
+						email: req.body.email,
+						username: req.body.username,
+						password: bcrypt.hashSync(req.body.password)
+					},
+					{
+						fields: ['name', 'email', 'username', 'password']
+					}
+				).then(() => {
+					res.send("User edited successfully!");
+				}).catch(err => {
+            		res.status(500).send('Error -> ' + err);
+        		});
+			}).catch(err => {
+	            res.status(500).send('Error -> ' + err);
+	        });
+		}).catch(err => {
+	        res.status(500).send('Error -> ' + err);
+	    });
+	}).catch(err => {
+        res.status(500).send('Error -> ' + err);
+    });
+}
+
+exports.deleteUser = (req, res) => {
+	User.destroy({
+		where: {
+			id: req.body.id
+		}
+	}).then(() => {
+		res.send("User deleted successfully!");
+	}).catch(err => {
+		res.status(500).send('Error -> ' + err);
+	});
+}
+
+exports.viewDetail = (req, res) => {
+	User.findOne({
+		where: {
+			id: req.body.id
+		},
+		attributes: ['id', 'name', 'email', 'username', 'password'],
+		include: [{
+			model: Role, 
+			attributes: ['id', 'name']
+		}]
+	}).then(users => {
+		res.status(200).json({
+			"description": "Users data",
+			"users": users
+		})
+	}).catch(err => {
+		res.status(500).json({
+			"description": "Error",
+			"error": err
+		});
+	})
+}
\ No newline at end of file
diff --git a/backend/package.json b/backend/package.json
index c0aa3d1bca7732b8c76997d361f4c46a25e15579..3102b5c4f3ddc96a0a976a25bb2704e398cd23bb 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -5,7 +5,7 @@
   "main": "index.js",
   "scripts": {
     "start": "node app.js",
-    "test": "mocha --timeout 10000"
+    "test": "mocha --timeout 10000 --exit"
   },
   "keywords": [],
   "author": "",
diff --git a/backend/router/router.js b/backend/router/router.js
index dd5efcd028636a232bdffe83d74b535d6a712b4c..a0ea45d9c6e436c809c8039b8f2a797cb806f43f 100644
--- a/backend/router/router.js
+++ b/backend/router/router.js
@@ -5,9 +5,16 @@ const tokenHandler = require('./jwtTokenHandler');
 module.exports = function(app) {
     const authController = require('../controller/authController.js');
     const testController = require('../controller/testController.js');
+    const userController = require('../controller/userController.js');
     app.post('/api/auth/signup', [verifySignUp.checkDuplicateUserNameOrEmail, verifySignUp.checkRolesExisted], authController.signup);
     app.post('/api/auth/login', authController.signin);
 
     app.get('/api/test/admin', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin, tokenHandler.extendJwtToken, tokenHandler.saveTokenToUser], testController.adminContent);
     app.get('/api/test/member', [verifyJwtToken.verifyToken, tokenHandler.extendJwtToken, tokenHandler.saveTokenToUser], testController.memberContent);
+
+    app.post('/api/user/all', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.fetchAll);
+    app.post('/api/user/create', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.createUser);
+    app.post('/api/user/edit', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.editUser);
+    app.post('/api/user/delete', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.deleteUser);
+    app.post('/api/user/detail', [verifyJwtToken.verifyToken, verifyJwtToken.isAdmin], userController.viewDetail);
 }
\ No newline at end of file
diff --git a/backend/test/user_test.js b/backend/test/user_test.js
index 84588a65db30406b564ffc3b19a5651f4fd7d73a..a58feba949eb7740be5a8e75bc1eef877e682ac8 100644
--- a/backend/test/user_test.js
+++ b/backend/test/user_test.js
@@ -7,6 +7,7 @@ const User = models.user;
 let app = require('../app.js')
 let should = chai.should();
 let expect = chai.expect;
+var bcrypt = require('bcryptjs')
 
 chai.use(chaiHttp);
 
@@ -24,7 +25,7 @@ describe('Users', () => {
                 "name": "Komi Shouko",
                 "username": "komisama",
                 "email":"komi@gmail.com",
-                "role":"Member Dinas",
+                "role":"Master Admin Diskominfo",
                 "password":"komisama"
             };
             chai.request('http://127.0.0.1:8081')
@@ -37,6 +38,234 @@ describe('Users', () => {
                     expect(res.text).to.equal('User registered successfully!');
                     done();
                 });
+
+        });
+    });
+});
+
+describe("Create user", () => {
+    it("Creating user", (done) => {
+        User.findOne({
+            where: {
+                username:"komisama"
+            },
+            attributes: ['id']
+        }).then(result => {
+            console.log("Find done");
+            let user = {
+                "username":"komisama",
+                "password":"komisama"
+            };
+            chai.request('http://127.0.0.1:8081')
+                .post('/api/auth/login')
+                .send(user)
+                .then(res => {
+                    console.log("sign done");
+                    let req = {
+                        "userId":result.id,
+                        "name":"Udin",
+                        "username":"udin",
+                        "email":"udin@udin.com",
+                        "password":"udin",
+                        "role":"Master Admin Diskominfo"
+                    };
+                    console.log(req)
+                    chai.request('http://127.0.0.1:8081')
+                        .post('/api/user/create')
+                        .set('x-access-token', res.body.accessToken)
+                        .send(req)
+                        .end((err, res)=>{
+                            console.log(res.text);
+                            should.exist(res);
+                            res.should.have.status(200);
+                            expect(res.text).to.equal('User created successfully!');
+                            done();
+                        });
+                }).catch(err => {
+                    res.status(500).send('Error -> ' + err);
+                });
+        }).catch(err => {
+            res.status(500).send('Error -> ' + err);
+        });
+    });
+});
+
+describe("Fetch 'em All", () => {
+    it('Fetch all user', (done) =>{
+        User.findOne({
+            where: {
+                username:"komisama"
+            },
+            attributes: ['id']
+        }).then(result => {
+            console.log("Find done");
+            let user = {
+                "username":"komisama",
+                "password":"komisama"
+            };
+            chai.request('http://127.0.0.1:8081')
+                .post('/api/auth/login')
+                .send(user)
+                .then(res => {
+                    console.log("sign done");
+                    let req = {
+                        "userId":result.id
+                    };
+                    console.log(req)
+                    chai.request('http://127.0.0.1:8081')
+                        .post('/api/user/all')
+                        .set('x-access-token', res.body.accessToken)
+                        .send(req)
+                        .end((err, res)=>{
+                            console.log(res.text);
+                            should.exist(res);
+                            res.should.have.status(200);
+                            expect(res.body.users[1].name).to.equal('Komi Shouko');
+                            expect(res.body.users[1].role.id).to.equal(1);
+                            expect(res.body.users[1].role.name).to.equal("Master Admin Diskominfo");
+                            done();
+                    });
+                }).catch(err => {
+                    res.status(500).send('Error -> ' + err);
+                });
+        }).catch(err => {
+            res.status(500).send('Error -> ' + err);
+        });
+    });
+});
+
+describe("Edit user", () => {
+    it("Editing user", (done) => {
+        User.findOne({
+            where: {
+                username:"komisama"
+            },
+            attributes: ['id']
+        }).then(result => {
+            console.log("Find done");
+            let user = {
+                "username":"komisama",
+                "password":"komisama"
+            };
+            chai.request('http://127.0.0.1:8081')
+                .post('/api/auth/login')
+                .send(user)
+                .then(res => {
+                    console.log("sign done");
+                    let req = {
+                        "userId":result.id,
+                        "id":result.id,
+                        "name":"Di-Komix Aja",
+                        "username":"komisama",
+                        "email":"komix@yahoo.com",
+                        "password":"komisama",
+                        "role":"Master Admin Diskominfo"
+                    };
+                    console.log(req)
+                    chai.request('http://127.0.0.1:8081')
+                        .post('/api/user/edit')
+                        .set('x-access-token', res.body.accessToken)
+                        .send(req)
+                        .end((err, res)=>{
+                            console.log(res.text);
+                            should.exist(res);
+                            res.should.have.status(200);
+                            expect(res.text).to.equal('User edited successfully!');
+                            done();
+                        });
+                }).catch(err => {
+                    res.status(500).send('Error -> ' + err);
+                });
+        }).catch(err => {
+            res.status(500).send('Error -> ' + err);
+        });
+    });
+});
+
+describe("View detail", () => {
+    it("Detail user", (done) => {
+        User.findOne({
+            where: {
+                username:"komisama"
+            },
+            attributes: ['id']
+        }).then(result => {
+            console.log("Find done");
+            let user = {
+                "username":"komisama",
+                "password":"komisama"
+            };
+            chai.request('http://127.0.0.1:8081')
+                .post('/api/auth/login')
+                .send(user)
+                .then(res => {
+                    console.log("sign done");
+                    let req = {
+                        "userId":result.id,
+                        "id":result.id
+                    };
+                    console.log(req)
+                    chai.request('http://127.0.0.1:8081')
+                        .post('/api/user/detail')
+                        .set('x-access-token', res.body.accessToken)
+                        .send(req)
+                        .end((err, res)=>{
+                            console.log(res.text);
+                            should.exist(res);
+                            res.should.have.status(200);
+                            expect(res.body.users.name).to.equal('Di-Komix Aja');
+                            expect(res.body.users.email).to.equal('komix@yahoo.com');
+                            expect(res.body.users.username).to.equal('komisama');
+                            done();
+                        });
+                }).catch(err => {
+                    res.status(500).send('Error -> ' + err);
+                });
+        }).catch(err => {
+            res.status(500).send('Error -> ' + err);
+        });
+    });
+});
+
+describe("Delete User", () => {
+    it("Delete user", (done) => {
+        User.findOne({
+            where: {
+                username:"komisama"
+            },
+            attributes: ['id']
+        }).then(result => {
+            console.log("Find done");
+            let user = {
+                "username":"komisama",
+                "password":"komisama"
+            };
+            chai.request('http://127.0.0.1:8081')
+                .post('/api/auth/login')
+                .send(user)
+                .then(res => {
+                    console.log("sign done");
+                    let req = {
+                        "userId":result.id,
+                        "id":result.id
+                    };
+                    console.log(req)
+                    chai.request('http://127.0.0.1:8081')
+                        .post('/api/user/delete')
+                        .set('x-access-token', res.body.accessToken)
+                        .send(req)
+                        .end((err, res)=>{
+                            console.log(res.text);
+                            should.exist(res);
+                            res.should.have.status(200);
+                            expect(res.text).to.equal('User deleted successfully!');
+                            done();
+                        });
+                }).catch(err => {
+                    res.status(500).send('Error -> ' + err);
+                });
+        }).catch(err => {
+            res.status(500).send('Error -> ' + err);
         });
     });
-});
\ No newline at end of file
+});