это мой первый проект 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)
}
Я знал, что мне нужно добавить эту проверку, но я не думал, что это решит эту проблему.