diff --git a/backend/mongodb.dump b/backend/mongodb.dump new file mode 100644 index 0000000..9049c2b Binary files /dev/null and b/backend/mongodb.dump differ diff --git a/backend/src/main/java/com/realnet/config/MongoDataInitializer.java b/backend/src/main/java/com/realnet/config/MongoDataInitializer.java new file mode 100644 index 0000000..39cb22c --- /dev/null +++ b/backend/src/main/java/com/realnet/config/MongoDataInitializer.java @@ -0,0 +1,221 @@ +package com.realnet.config; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Component; + +import com.realnet.fnd.entity1.GrpMenuAccess; +import com.realnet.fnd.entity1.MenuDet; +import com.realnet.fnd.repository1.GrpMenuAccessRepository; +import com.realnet.fnd.repository1.MenuDetRepository; +import com.realnet.users.entity.Role; +import com.realnet.users.entity.Sys_Accounts; +import com.realnet.users.entity1.AppUser; +import com.realnet.users.entity1.AppUserRole; +import com.realnet.users.repository.RoleRepo; +import com.realnet.users.repository.SysAccountRepo; +import com.realnet.users.repository1.AppUserRepository; +import com.realnet.users.repository1.AppUserRoleRepository; + +@Component +public class MongoDataInitializer implements CommandLineRunner { + + private static final Logger LOGGER = LoggerFactory.getLogger(MongoDataInitializer.class); + + @Autowired + private RoleRepo roleRepo; + + @Autowired + private AppUserRoleRepository appUserRoleRepository; + + @Autowired + private SysAccountRepo sysAccountRepo; + + @Autowired + private AppUserRepository appUserRepository; + + @Autowired + private MenuDetRepository menuDetRepository; + + @Autowired + private GrpMenuAccessRepository grpMenuAccessRepository; + + @Autowired + private BCryptPasswordEncoder bcryptEncoder; + + @Override + public void run(String... args) throws Exception { + LOGGER.info("[MongoDataInitializer] Checking and initializing baseline data..."); + + // 1. Initialize Roles + Role adminRole = initRole("ROLE_ADMIN", "ADMIN"); + Role devRole = initRole("ROLE_Developer", "Developer"); + initRole("ROLE_USER", "USER"); + initRole("ROLE_DEVEOPS", "DEVEOPS"); + + // 2. Initialize User Groups (AppUserRole) + AppUserRole adminGrp = initUserGroup(1L, "sysadmin", "System Administrator", 30L); + AppUserRole userGrp = initUserGroup(41L, "users", "Default Users", 20L); + AppUserRole devGrp = initUserGroup(42L, "Developer", "Developers", 25L); + + // 3. Initialize Sys_Accounts + Sys_Accounts defaultAccount = initAccount(1L, "Default Account"); + + // 4. Initialize Default Admin User (sysadmin) + initAdminUser(adminRole, devRole, adminGrp, defaultAccount); + + // 5. Initialize Core Navigation Menus + initMenusAndAccess(adminGrp, userGrp); + + LOGGER.info("[MongoDataInitializer] Baseline data initialization check complete."); + } + + private Role initRole(String name, String description) { + Role r = roleRepo.findByName(name); + if (r == null) { + r = new Role(); + r.setName(name); + r.setDescription(description); + r = roleRepo.save(r); + LOGGER.info("[MongoDataInitializer] Created default Role: {}", name); + } + return r; + } + + private AppUserRole initUserGroup(Long usrGrpId, String name, String desc, Long level) { + AppUserRole g = appUserRoleRepository.findById(usrGrpId); + if (g == null) { + g = new AppUserRole(); + g.setUsrGrp(usrGrpId); + g.setGroupName(name); + g.setGroupDesc(desc); + g.setGroupLevel(level); + g.setStatus("E"); + g.setCreatedate(new Date()); + g = appUserRoleRepository.save(g); + LOGGER.info("[MongoDataInitializer] Created default AppUserRole group: {} ({})", name, usrGrpId); + } + return g; + } + + private Sys_Accounts initAccount(Long accountId, String companyName) { + Sys_Accounts acc = sysAccountRepo.findById(accountId); + if (acc == null) { + acc = new Sys_Accounts(); + acc.setAccount_id(accountId); + acc.setCompanyName(companyName); + acc = sysAccountRepo.save(acc); + LOGGER.info("[MongoDataInitializer] Created default Sys_Accounts with ID: {}", accountId); + } + return acc; + } + + private void initAdminUser(Role adminRole, Role devRole, AppUserRole adminGrp, Sys_Accounts account) { + AppUser existing = appUserRepository.findByEmail("sysadmin"); + if (existing == null) { + existing = appUserRepository.findByEmail("admin"); + } + if (existing == null) { + AppUser adminUser = new AppUser(); + adminUser.setUsername("sysadmin"); + adminUser.setEmail("sysadmin@domain.com"); + adminUser.setFullName("System Admin"); + adminUser.setUserPassw(bcryptEncoder.encode("sysadmin")); + adminUser.setChangePassw("sysadmin"); + adminUser.setActive(true); + adminUser.setIsComplete(true); + adminUser.setUsrGrp(adminGrp); + adminUser.setAccount(account); + adminUser.setCreatedate(java.time.LocalDateTime.now()); + + Set roles = new HashSet<>(); + if (adminRole != null) roles.add(adminRole); + if (devRole != null) roles.add(devRole); + adminUser.setRoles(roles); + + appUserRepository.save(adminUser); + LOGGER.info("[MongoDataInitializer] Created default Admin user: sysadmin / sysadmin"); + } + } + + private void initMenusAndAccess(AppUserRole adminGrp, AppUserRole userGrp) { + // Only seed menus if the menu table is empty + if (menuDetRepository.findAll().isEmpty()) { + LOGGER.info("[MongoDataInitializer] Seeding core navigation menus..."); + + // Root: Security + MenuDet sec = createMenu(1116L, 0L, 3000L, "Security", "security", "sec3000", "lock"); + MenuDet uMaint = createMenu(1117L, 1116L, 3010L, "User Maintance", "usermaintance", "U1000", null); + MenuDet uGrpMaint = createMenu(1118L, 1116L, 3020L, "User Group Maintance", "usergrpmaintance", "U2000", null); + MenuDet mMaint = createMenu(1523L, 1116L, 3030L, "Menu Maintance", "menumaintance", "M3000", null); + MenuDet mAccess = createMenu(1524L, 1116L, 3040L, "Menu Access Control", "menuaccess", "MA4000", null); + MenuDet sysParam = createMenu(1525L, 1116L, 3050L, "System Parameters", "systemparameters", "SP5000", null); + MenuDet accType = createMenu(1526L, 1116L, 3060L, "Access Type", "accesstype", "A6000", null); + + // Root: Transactions + MenuDet trans = createMenu(1577L, 0L, 7000L, "Transactions", "Transactions", "Transactions", "King"); + + // Root: Masters + MenuDet masters = createMenu(1601L, 0L, 9000L, "Masters", "Masters", "Masters", "data-cluster"); + + List allMenus = new ArrayList<>(); + allMenus.add(sec); + allMenus.add(uMaint); + allMenus.add(uGrpMaint); + allMenus.add(mMaint); + allMenus.add(mAccess); + allMenus.add(sysParam); + allMenus.add(accType); + allMenus.add(trans); + allMenus.add(masters); + + // Grant access to admin group (1) and user group (41) + for (MenuDet m : allMenus) { + grantAccess(adminGrp, m); + grantAccess(userGrp, m); + } + LOGGER.info("[MongoDataInitializer] Core menus and permissions initialized successfully."); + } + } + + private MenuDet createMenu(Long menuItemId, Long menuId, Long seq, String desc, String modName, String action, String icon) { + MenuDet m = new MenuDet(); + m.setMenuItemId(menuItemId); + m.setMenuId(menuId); + m.setItemSeq(seq); + m.setMenuItemDesc(desc); + m.setModuleName(modName); + m.setMain_menu_action_name(action); + m.setMain_menu_icon_name(icon); + m.setStatus("Enable"); + return menuDetRepository.save(m); + } + + private void grantAccess(AppUserRole grp, MenuDet menu) { + try { + GrpMenuAccess a = new GrpMenuAccess(); + a.setUsrGrp(grp); + a.setMenuItemId(menu); + a.setMenuId(menu.getMenuId()); + a.setMVisible("true"); + a.setMCreate("true"); + a.setMEdit("true"); + a.setMDelete("true"); + a.setMQuery("true"); + a.setMexport("true"); + a.setCreatedAt(new Date()); + grpMenuAccessRepository.save(a); + } catch (Exception e) { + LOGGER.warn("[MongoDataInitializer] Could not grant access for menu {}: {}", menu.getMenuItemId(), e.getMessage()); + } + } +} diff --git a/backend/src/main/java/com/realnet/session/controller/SessionController.java b/backend/src/main/java/com/realnet/session/controller/SessionController.java index ec95832..626b8f9 100644 --- a/backend/src/main/java/com/realnet/session/controller/SessionController.java +++ b/backend/src/main/java/com/realnet/session/controller/SessionController.java @@ -143,16 +143,12 @@ public class SessionController { MDC.put("USER", loggedInUser.getUsername()); // System.out.println("/session logged in user -> " + loggedInUser); -// List loggedInUserRoles = new ArrayList(); StringBuilder roleString = new StringBuilder(); - roleString.append(loggedInUser.getUsrGrp().getGroupName()); -// .forEach(role -> { -//// loggedInUserRoles.add(role.getName()); -// roleString.append(role.getName() + ", "); -// }); - // String role = roleString.toString().substring(0, - // roleString.toString().lastIndexOf(",")); - // List roleList = Arrays.asList(role.split("\\s*,\\s*")); + if (loggedInUser.getUsrGrp() != null && loggedInUser.getUsrGrp().getGroupName() != null) { + roleString.append(loggedInUser.getUsrGrp().getGroupName()); + } else { + roleString.append("users"); + } SessionResponse resp = new SessionResponse(); SessionItem sessionItem = new SessionItem(); @@ -162,11 +158,19 @@ public class SessionController { sessionItem.setFirstName(loggedInUser.getFullName()); // sessionItem.setUsername(loggedInUser.getUsername()); sessionItem.setEmail(loggedInUser.getEmail()); - // sessionItem.setRoles(roleList); Set roles = loggedInUser.getRoles(); List roleList = new ArrayList<>(); - for (Role ro : roles) { - roleList.add(ro.getDescription()); + if (roles != null) { + for (Role ro : roles) { + if (ro != null && ro.getDescription() != null) { + roleList.add(ro.getDescription()); + } else if (ro != null && ro.getName() != null) { + roleList.add(ro.getName()); + } + } + } + if (roleList.isEmpty()) { + roleList.add("ROLE_USER"); } sessionItem.setRoles(roleList); // sessionItem.setRoles(loggedInUser.getUsrGrp().getGroupName()); diff --git a/backend/src/main/java/com/realnet/users/entity1/AppUserPrinciple.java b/backend/src/main/java/com/realnet/users/entity1/AppUserPrinciple.java index f6c1f2d..f928aad 100644 --- a/backend/src/main/java/com/realnet/users/entity1/AppUserPrinciple.java +++ b/backend/src/main/java/com/realnet/users/entity1/AppUserPrinciple.java @@ -55,15 +55,21 @@ public class AppUserPrinciple implements UserDetails{ // authorities.add(new SimpleGrantedAuthority("ROLE_"+role)); // return authorities; - Set roles = u.getRoles(); - List authorities = new ArrayList<>(); - - for (Role role : roles) { -// authorities.add(new SimpleGrantedAuthority(role.getName().getDeclaringClass().getName())); - authorities.add(new SimpleGrantedAuthority(role.getName())); - } - - return authorities; + Set roles = u.getRoles(); + List authorities = new ArrayList<>(); + + if (roles != null) { + for (Role role : roles) { + if (role != null && role.getName() != null) { + authorities.add(new SimpleGrantedAuthority(role.getName())); + } + } + } + if (authorities.isEmpty()) { + authorities.add(new SimpleGrantedAuthority("ROLE_USER")); + } + + return authorities; } @Override diff --git a/backend/src/main/java/com/realnet/users/service1/AppUserServiceImpl.java b/backend/src/main/java/com/realnet/users/service1/AppUserServiceImpl.java index 1f7a857..46b93f7 100644 --- a/backend/src/main/java/com/realnet/users/service1/AppUserServiceImpl.java +++ b/backend/src/main/java/com/realnet/users/service1/AppUserServiceImpl.java @@ -87,12 +87,14 @@ public class AppUserServiceImpl implements UserDetailsService, AppUserService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { Optional user = appUserRepository.findByUsername(username); - if (user.get() == null) { - throw new UsernameNotFoundException("Invalid Email or password."); + if (!user.isPresent()) { + AppUser userByEmail = appUserRepository.findByEmail(username); + if (userByEmail == null) { + throw new UsernameNotFoundException("Invalid Email or password: " + username); + } + return new AppUserPrinciple(userByEmail); } - AppUserPrinciple appUserPrinciple = new AppUserPrinciple(user.get()); - - return appUserPrinciple; + return new AppUserPrinciple(user.get()); } public List getAllAppUsers(Pageable page) { @@ -137,13 +139,23 @@ public class AppUserServiceImpl implements UserDetailsService, AppUserService { if (reg.getUsrGrpId() != null) { r = appUserRoleRepository.findById(usrGrpId); } - - if (r != null) { - appUser.setUsrGrp(r); + if (r == null) { + r = new AppUserRole(); + r.setUsrGrp(usrGrpId != null ? usrGrpId : 41L); + r.setGroupName("users"); + r.setGroupDesc("Default Users"); + r = appUserRoleRepository.save(r); } - Long account_id = reg.getAccount_id(); + appUser.setUsrGrp(r); - Sys_Accounts account = sysAccountRepo.findById(account_id); + Long account_id = reg.getAccount_id(); + Sys_Accounts account = null; + if (account_id != null) { + account = sysAccountRepo.findById(account_id); + } + if (account == null) { + account = sysAccountRepo.findById(1L); + } appUser.setAccount(account); appUser.setFullName(reg.getFirst_name() + " " + reg.getLast_name()); appUser.setMob_no(reg.getMob_no()); @@ -156,14 +168,15 @@ public class AppUserServiceImpl implements UserDetailsService, AppUserService { Set strRoles = appUser.getRoles(); Set roles = new HashSet<>(); - if (strRoles == null || strRoles.isEmpty()) { + if (strRoles == null || strRoles.isEmpty()) { String role1 = "ROLE_ADMIN"; -// Role role = new Role(); -// role.setId(1l); -// role.setName(role1); -// role.setDescription(role1); -// roleRepo.save(role); Role userRole = roleRepo.findByName(role1); + if (userRole == null) { + userRole = new Role(); + userRole.setName(role1); + userRole.setDescription("ADMIN"); + userRole = roleRepo.save(userRole); + } roles.add(userRole); appUser.setRoles(roles); } diff --git a/backend/src/main/resources/mongodb.dump b/backend/src/main/resources/mongodb.dump new file mode 100644 index 0000000..9049c2b Binary files /dev/null and b/backend/src/main/resources/mongodb.dump differ