Ошибка Grails3 / groovy, повторяющая список, в котором был удален индекс 0 - PullRequest
0 голосов
/ 22 мая 2018

это мой первый проект Grails, так что извините, если это вопрос новичка, но я ничего о нем не нашел.

Я использую Grails 3.3.2 с mongoDB, и вызовы в БД выполняются с помощью GORM.

Я создал метод, который получает список пользователей для создания MAP с пользователямии их конкретные роли и визуализировать его.Только администратор имеет доступ к этой странице, и теперь я не хочу, чтобы вошедший в систему администратор имел доступ к своим привилегиям / роли, другими словами, администратор может изменять только роли других администраторов.Таким образом, система не будет без администратора по ошибке.

Это метод:

@Secured(["ROLE_Administrador"])
    def renderListUsers(def listUsers) {
        //remove o proprio utilizador antes de tudo!

        // THIS PRINTLN !!
        //println(listUsers)
        listUsers.remove(User.findByUsername(getPrincipal().username))
        def usersWithRole = [:]
        for (user in listUsers) {
            usersWithRole[user.username] = UserRole.findByUser(user).role.toString().split("_")[1]
        }
        render(view: "listUsers", model: [users: listUsers, userRoles: usersWithRole])
    }

Этот метод работает отлично, проблема в том, что, как только я добавил"listUsers.remove (...)" (строка 7), чтобы удалить зарегистрированного пользователя. Я получаю эту ошибку , и я не понимаю, почему, тогда я обнаруживаю, что ошибка возникает, только еслиПользователь удален находится в индексе 0 этого списка.

Теперь я обнаружил, если я добавлю этот "println (listUsers)", прежде чем он будет работать всегда!Даже если удаленный объект находится в индексе 0.

Это известная ошибка в groovy или что я делаю не так?Я не хочу оставлять этот отпечаток там.

Спасибо за ваше время!

РЕДАКТИРОВАТЬ: Есть работать!Таким образом:

def loggedUser = User.findByUsername(getPrincipal().username)
        if (loggedUser in listUsers) {
            listUsers.remove(loggedUser)
        }

Я знал, что мне нужно добавить эту проверку, но я не думал, что это решит эту проблему.

...