@RequestMapping("role-def-sync") public String sync(@RequestParam("id") Long id) throws Exception { RoleDef roleDef = roleDefManager.get(id); List<Role> roles = roleManager.findBy("roleDef.id", id); ScopeDTO currentScope = ScopeHolder.getScopeDto(); List<ScopeDTO> scopeDtos; if (currentScope.isShared()) { scopeDtos = scopeConnector.findAll(); } else { scopeDtos = new ArrayList<ScopeDTO>(); scopeDtos.add(currentScope); } for (ScopeDTO scopeDto : scopeDtos) { Role existedRole = null; for (Role role : roles) { if (role.getScopeId().equals(scopeDto.getId())) { existedRole = role; break; } } if (existedRole == null) { Role role = new Role(); role.setName(roleDef.getName()); role.setRoleDef(roleDef); role.setScopeId(scopeDto.getId()); roleManager.save(role); } } for (Role role : roles) { boolean existed = false; for (ScopeDTO scopeDto : scopeDtos) { if (role.getScopeId().equals(scopeDto.getId())) { existed = true; break; } } if (!existed) { roleManager.remove(role); } } return "redirect:/auth/role-def-manage.do?id=" + id; }