public RoleDTO convertRoleDto(Role role, boolean useScope) {
    RoleDTO roleDto = new RoleDTO();
    roleDto.setId(role.getId());

    if (useScope) {
      roleDto.setName(
          role.getName() + "(" + scopeConnector.findById(role.getScopeId()).getName() + ")");
    } else {
      roleDto.setName(role.getName());
    }

    roleDto.setScopeId(role.getScopeId());

    return roleDto;
  }
  @RequestMapping("role-def-manage")
  public String manage(@RequestParam("id") Long id, Model model) 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);
    }

    List<RoleDTO> roleDtos = new ArrayList<RoleDTO>();

    for (ScopeDTO scopeDto : scopeDtos) {
      Role existedRole = null;

      for (Role role : roles) {
        if (role.getScopeId().equals(scopeDto.getId())) {
          existedRole = role;

          break;
        }
      }

      if (existedRole == null) {
        RoleDTO roleDto = new RoleDTO();
        roleDto.setName(roleDef.getName());
        roleDto.setScopeId(scopeDto.getId());
        roleDto.setStatus("added");
        roleDtos.add(roleDto);
      } else {
        RoleDTO roleDto = new RoleDTO();
        roleDto.setName(roleDef.getName());
        roleDto.setId(existedRole.getId());
        roleDto.setScopeId(scopeDto.getId());
        roleDto.setStatus("existed");
        roleDtos.add(roleDto);
      }
    }

    for (Role role : roles) {
      boolean existed = false;

      for (ScopeDTO scopeDto : scopeDtos) {
        if (role.getScopeId().equals(scopeDto.getId())) {
          existed = true;

          break;
        }
      }

      if (!existed) {
        RoleDTO roleDto = new RoleDTO();
        roleDto.setName(roleDef.getName());
        roleDto.setId(role.getId());
        roleDto.setScopeId(role.getScopeId());
        roleDto.setStatus("removed");
        roleDtos.add(roleDto);
      }
    }

    model.addAttribute("roleDts", roleDtos);

    return "auth/role-def-manage";
  }