diff --git a/backend/src/controller/userController.js b/backend/src/controller/userController.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec0df433ed9bb24dd96befabe1e60ee0082fb92f
--- /dev/null
+++ b/backend/src/controller/userController.js
@@ -0,0 +1,121 @@
+const db = require('../config/db.config.js');
+const config = require('../config/config.js');
+var bcrypt = require('bcryptjs');
+const User = db.user;
+const Role = db.role;
+
+exports.fetchAll = (req, res) => {
+	User.findAll({
+		attributes: ['id', 'name', 'username'],
+		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