Grails3 / groovy错误迭代删除了索引0的列表

时间:2018-05-22 17:22:47

标签: arrays list groovy grails3

这是我的第一个grails项目,很抱歉,如果这是一个新的问题,但我没有找到任何相关内容。

我正在使用带有mongoDB的Grails 3.3.2,并且使用GORM调用DB。

我创建了一个方法,该方法接收用户列表以创建包含用户及其特定角色的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行)来删除已登录的用户我就getting this error而且我没有'理解为什么,然后我发现只有当删除的用户在该列表的索引0中时才会出现错误。

现在我发现如果我将“println(listUsers)”添加到它之前就行了!即使删除的对象在索引0中。

这是groovy上的已知错误还是我做错了什么?我不想在那里留下那份印刷品。

感谢您的时间!

编辑: 搞定了!这样:

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

我知道我需要添加此验证,但我认为它不会解决此问题。

0 个答案:

没有答案