我在基於用戶角色驗證和重新設置某些字段時遇到問題。 我想用grails開發一個rest api,當我嘗試根據用戶的角色重置一些字段時出現問題。我通過PUT向控制器發送帶有所需的「不允許」更改的json。我將不允許的字段修改爲對我來說不正確的字段,然後調用.save(),並且「未顯示」字段將使用它們的發送值進行更新,而不是使用修改後的值進行更新。這是代碼。Grails在保存前更新模型
THE MODEL
package phonebook
class User {
String firstName
String lastName
String phoneNo
String address
String email
String password
boolean active = false
String hash
String authToken = ""
String role = "user"
static hasMany = [contacts:Contact]
static constraints = {
firstName(blank: false)
lastName(blank: false)
address(blank: true)
phoneNo(unique: true)
email(blank: false, unique: true)
password(blank: false)
role(blank: false, inList: ["user", "admin"])
hash(blank: true)
authToken(blank: true)
active(inList:[true,false])
}
}
來自控制器的方法:
@Transactional
def update(User userInstance) {
if (!isAuthenticated()){
notAllowed()
return
}
if (userInstance == null) {
notFound()
return
}
//if(isAdmin()){
def userBackup = User.findById(userInstance.id)
userInstance.role = userBackup.role
userInstance.active = userBackup.active
userInstance.hash = userBackup.hash
userInstance.authToken = userBackup.authToken
//}
if (userInstance.hasErrors()) {
respond userInstance.errors, view:'edit'
return
}
userInstance.save flush:false
request.withFormat {
'*'{ respond userInstance, [status: OK] }
}
}
THE JSON SENT VIA PUT
{
"id":"1",
"firstName": "Modified Name 23",
"role":"admin",
"active":"true",
"hash":"asdasd"
}
上面的代碼不應該修改我的散列或活性或值即使他們被髮送也是如此。
任何想法? 謝謝。
你是什麼意思的「不允許」?你的意思是隻有特定的用戶才能修改這些字段 - 問題在於其他用戶似乎也能夠修改這些字段? – Denise
。問題是,即使強硬我抵消了變化,它仍然更新與「不允許」值發送 –