diff --git a/pom.xml b/pom.xml
index b937cae8d67980ee2105facf93b71583ba79724e..ee4c80991558c630fdfeee1bda726c032b140ffd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,17 +29,17 @@
 		<dependency>
 			<groupId>org.springframework.security</groupId>
 			<artifactId>spring-security-jwt</artifactId>
-			<version>1.1.0.RELEASE</version>
+			<version>1.1.1.RELEASE</version>
 		</dependency>
 		<dependency>
 			<groupId>org.springframework.security.oauth</groupId>
 			<artifactId>spring-security-oauth2</artifactId>
-			<version>2.5.0.RELEASE</version>
+			<version>2.5.2.RELEASE</version>
 		</dependency>
 		<dependency>
 			<groupId>io.jsonwebtoken</groupId>
 			<artifactId>jjwt</artifactId>
-			<version>0.6.0</version>
+			<version>0.9.1</version>
 		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
@@ -85,12 +85,13 @@
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-test</artifactId>
+			<version>3.1.0</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.maven</groupId>
 			<artifactId>maven-artifact-manager</artifactId>
-			<version>2.0</version>
+			<version>2.2.1</version>
 		</dependency>
 	</dependencies>
 
diff --git a/src/main/java/org/upsmf/grievance/controller/RoleController.java b/src/main/java/org/upsmf/grievance/controller/RoleController.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f5bbba6cbff15bfcb33669d2bcd276d9c6f9d51
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/controller/RoleController.java
@@ -0,0 +1,47 @@
+package org.upsmf.grievance.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.upsmf.grievance.model.Role;
+import org.upsmf.grievance.service.RoleService;
+
+import javax.management.relation.RoleNotFoundException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/roles")
+public class RoleController {
+
+    @Autowired
+    private RoleService roleService;
+
+    @PostMapping("/addrole")
+    public ResponseEntity<Role> createRole(@RequestParam String roleName) {
+        Role createdRole = roleService.createRole(roleName);
+        return ResponseEntity.status(HttpStatus.CREATED).body(createdRole);
+    }
+
+    @PutMapping("/{roleId}")
+    public ResponseEntity<Role> updateRole(@PathVariable Long roleId, @RequestParam String newRoleName) throws RoleNotFoundException {
+        Role updatedRole = roleService.updateRole(roleId, newRoleName);
+        return ResponseEntity.ok(updatedRole);
+    }
+
+    @GetMapping
+    public ResponseEntity<List<Role>> getAllRoles() {
+        List<Role> roles = roleService.getAllRoles();
+        return ResponseEntity.ok(roles);
+    }
+
+    @GetMapping("/{roleId}")
+    public ResponseEntity<Role> getRoleById(@PathVariable Long roleId) {
+        Role role = roleService.getRoleById(roleId);
+        if (role != null) {
+            return ResponseEntity.ok(role);
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+}
diff --git a/src/main/java/org/upsmf/grievance/controller/UserController.java b/src/main/java/org/upsmf/grievance/controller/UserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b3721f916130c05382acf1a9bad52dba9876a4a
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/controller/UserController.java
@@ -0,0 +1,64 @@
+package org.upsmf.grievance.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.upsmf.grievance.model.User;
+import org.upsmf.grievance.service.UserService;
+
+
+@Controller
+@RequestMapping("/user")
+public class UserController {
+
+    @Autowired
+    private UserService userService;
+
+        @PostMapping("/register")
+    public ResponseEntity<String> registerUser(@RequestBody User user) {
+        userService.registerUser(user);
+        return ResponseEntity.ok("User registered successfully.");
+    }
+
+    @PostMapping("/forgot-password")
+    public ResponseEntity<String> forgotPassword(@RequestParam String email) {
+        User user = userService.findByEmail(email);
+        // Logic for sending reset password instructions
+        return ResponseEntity.ok("Password reset instructions sent.");
+    }
+
+    @PostMapping("/reset-password")
+    public ResponseEntity<String> resetPassword(@RequestParam String email, @RequestParam String newPassword) {
+        try {
+            userService.resetUserPassword(email, newPassword);
+            return ResponseEntity.ok("Password reset successful.");
+        } catch (Exception e) {
+            return ResponseEntity.badRequest().body("User not found.");
+        }
+    }
+
+    @PostMapping("/login")
+    public ResponseEntity<String> loginUser(@RequestParam String username, @RequestParam String password) {
+        User user = userService.findByUsername(username);
+
+        if (user == null) {
+            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid username or password.");
+        }
+
+        // Compare the provided password with the stored hashed password
+        if (userService.matchPassword(password, user.getPassword())) {
+            return ResponseEntity.ok("Login successful.");
+        } else {
+            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid username or password.");
+        }
+    }
+
+
+
+
+}
diff --git a/src/main/java/org/upsmf/grievance/model/Role.java b/src/main/java/org/upsmf/grievance/model/Role.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8996acba548c0690bfa762c9a6681bd09f7fa26
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/model/Role.java
@@ -0,0 +1,25 @@
+package org.upsmf.grievance.model;
+
+import lombok.*;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "role")
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ToString
+public class Role {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(nullable=false, unique=true)
+    private String name;
+
+}
diff --git a/src/main/java/org/upsmf/grievance/model/User.java b/src/main/java/org/upsmf/grievance/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..f408cfb286ba9dbc2e9a7e67f0ec158352cf780c
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/model/User.java
@@ -0,0 +1,39 @@
+package org.upsmf.grievance.model;
+
+import lombok.*;
+
+import javax.persistence.*;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+@Table(name = "users")
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ToString
+public class User {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(nullable=false)
+    private String username;
+
+    @Column(nullable=false, unique=true)
+    private String email;
+
+    @Column(nullable=false)
+    private String password;
+
+    @ManyToMany(fetch = FetchType.EAGER)
+    @JoinTable(
+            name = "user_roles",
+            joinColumns = @JoinColumn(name = "user_id"),
+            inverseJoinColumns = @JoinColumn(name = "role_id")
+    )
+    private Set<Role> roles = new HashSet<>();
+}
diff --git a/src/main/java/org/upsmf/grievance/repository/RoleRepository.java b/src/main/java/org/upsmf/grievance/repository/RoleRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..b46cdf46071839b4280266000843f478bf5d6bb3
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/repository/RoleRepository.java
@@ -0,0 +1,9 @@
+package org.upsmf.grievance.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import org.upsmf.grievance.model.Role;
+@Repository("roleRepository")
+public interface RoleRepository extends JpaRepository<Role,Long> {
+    Role findByName(String name);
+}
diff --git a/src/main/java/org/upsmf/grievance/repository/UserRepository.java b/src/main/java/org/upsmf/grievance/repository/UserRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac2528667d50171a4c829d9ade5d1f785b959b7f
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/repository/UserRepository.java
@@ -0,0 +1,11 @@
+package org.upsmf.grievance.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import org.upsmf.grievance.model.User;
+@Repository("userRepository")
+public interface UserRepository extends JpaRepository<User,Long> {
+
+    User findByUsername(String username);
+    User findByEmail(String email);
+}
diff --git a/src/main/java/org/upsmf/grievance/service/RoleService.java b/src/main/java/org/upsmf/grievance/service/RoleService.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ed4de05dd2c67603f91998d60d4b8dabb59c6e1
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/service/RoleService.java
@@ -0,0 +1,17 @@
+package org.upsmf.grievance.service;
+
+import org.springframework.stereotype.Service;
+import org.upsmf.grievance.model.Role;
+
+import javax.management.relation.RoleNotFoundException;
+import java.util.List;
+
+public interface RoleService {
+
+    Role createRole(String roleName);
+    Role updateRole(Long roleId, String newRoleName) throws RoleNotFoundException;
+
+    List<Role> getAllRoles();
+
+    Role getRoleById(Long roleId);
+}
diff --git a/src/main/java/org/upsmf/grievance/service/UserService.java b/src/main/java/org/upsmf/grievance/service/UserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..371ec6743f2e4b77116ba6a2ab6ed99f6c356c40
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/service/UserService.java
@@ -0,0 +1,18 @@
+package org.upsmf.grievance.service;
+
+import org.springframework.stereotype.Service;
+import org.upsmf.grievance.model.User;
+
+
+public interface UserService {
+
+    User registerUser(User user);
+    User findByEmail(String email);
+
+    User findByUsername(String username);
+
+    boolean matchPassword(String rawPassword, String hashedPassword);
+
+    void resetUserPassword(String email, String newPassword) throws Exception;
+
+}
diff --git a/src/main/java/org/upsmf/grievance/service/impl/RoleServiceImpl.java b/src/main/java/org/upsmf/grievance/service/impl/RoleServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ca7a2ed1b9de78672030e86e1b122c760ad6835
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/service/impl/RoleServiceImpl.java
@@ -0,0 +1,48 @@
+package org.upsmf.grievance.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.upsmf.grievance.model.Role;
+import org.upsmf.grievance.repository.RoleRepository;
+import org.upsmf.grievance.service.RoleService;
+
+import javax.management.relation.RoleNotFoundException;
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class RoleServiceImpl implements RoleService {
+
+    @Autowired
+    private RoleRepository roleRepository;
+    @Override
+    public Role createRole(String roleName) {
+        Role role = new Role();
+        role.setName(roleName);
+        return roleRepository.save(role);
+    }
+
+    @Override
+    public Role updateRole(Long roleId, String newRoleName) throws RoleNotFoundException {
+        Optional<Role> optionalRole = roleRepository.findById(roleId);
+
+        if (optionalRole.isPresent()) {
+            Role role = optionalRole.get();
+            role.setName(newRoleName);
+            return roleRepository.save(role);
+        } else {
+            // Handle the case where the role with the given ID is not found
+            throw new RoleNotFoundException("Role not found with ID: " + roleId);
+        }
+    }
+
+    @Override
+    public List<Role> getAllRoles() {
+        return roleRepository.findAll();
+    }
+
+    @Override
+    public Role getRoleById(Long roleId) {
+        return roleRepository.findById(roleId).orElse(null);
+    }
+}
diff --git a/src/main/java/org/upsmf/grievance/service/impl/UserServiceImpl.java b/src/main/java/org/upsmf/grievance/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..09af433005fa5106444137820896491301a7ee39
--- /dev/null
+++ b/src/main/java/org/upsmf/grievance/service/impl/UserServiceImpl.java
@@ -0,0 +1,65 @@
+package org.upsmf.grievance.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.upsmf.grievance.model.Role;
+import org.upsmf.grievance.model.User;
+import org.upsmf.grievance.repository.RoleRepository;
+import org.upsmf.grievance.repository.UserRepository;
+import org.upsmf.grievance.service.UserService;
+
+import java.util.Collections;
+
+@Service
+public class UserServiceImpl implements UserService {
+
+    @Autowired
+    private UserRepository userRepository;
+
+    @Autowired
+    private RoleRepository roleRepository;
+
+    @Autowired
+    private BCryptPasswordEncoder passwordEncoder;
+
+
+    @Override
+    public User registerUser(User user) {
+        user.setPassword(passwordEncoder.encode(user.getPassword()));
+        // Assign a default role for new users
+        Role userRole = roleRepository.findByName("ROLE_USER");
+        user.setRoles(Collections.singleton(userRole));
+        return userRepository.save(user);
+    }
+
+    @Override
+    public User findByUsername(String username) {
+
+        return userRepository.findByUsername(username);
+    }
+
+    @Override
+    public boolean matchPassword(String rawPassword, String hashedPassword) {
+        return passwordEncoder.matches(rawPassword, hashedPassword);
+    }
+
+    @Override
+    public void resetUserPassword(String email, String newPassword) throws Exception {
+        User user = userRepository.findByEmail(email);
+
+        if (user == null) {
+            throw new Exception("User not found");
+        }
+
+        user.setPassword(newPassword);
+        userRepository.save(user);
+    }
+
+    @Override
+    public User findByEmail(String email) {
+
+        return userRepository.findByEmail(email);
+    }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 3434466049ea180d8e16778601a098b223803f1e..cd21f6f2a2efa93e88e3bec0f39c10065179a1b7 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -43,4 +43,7 @@ gcp.bucket.folder.name=grievance
 gcp.max.file.size=2mb
 gcp.config.file.path=/Users/shishirsuman/Desktop/upsmf.json
 gcp.client.id=
+gcp.client.email=
+gcp.pkcs.key=
+gcp.private.key.id=