comparison controllers/user.go @ 342:c6bd6ed18942

Use INSTEAD OF trigger for user deletion As we already have this for updating, it's more symmetric to make the whole thing look like a real table. TODO: make it happen also for user creation.
author Tom Gottfried <tom@intevation.de>
date Mon, 06 Aug 2018 12:37:06 +0200
parents 003243ec5ce5
children 5b03f420957d
comparison
equal deleted inserted replaced
341:889517f254f5 342:c6bd6ed18942
26 updateUserExtentSQL = `UPDATE users.list_users 26 updateUserExtentSQL = `UPDATE users.list_users
27 SET (rolname, username, pw, country, map_extent, email_address) 27 SET (rolname, username, pw, country, map_extent, email_address)
28 = ($2, $3, $4, $5, ST_MakeBox2D(ST_Point($6, $7), ST_Point($8, $9)), $10) 28 = ($2, $3, $4, $5, ST_MakeBox2D(ST_Point($6, $7), ST_Point($8, $9)), $10)
29 WHERE username = $1` 29 WHERE username = $1`
30 30
31 deleteUserSQL = `SELECT sys_admin.delete_user($1)` 31 deleteUserSQL = `DELETE FROM users.list_users WHERE username = $1`
32 32
33 listUsersSQL = `SELECT 33 listUsersSQL = `SELECT
34 rolname, 34 rolname,
35 username, 35 username,
36 country, 36 country,
64 if session.User == user { 64 if session.User == user {
65 err = JSONError{http.StatusBadRequest, "error: cannot delete yourself"} 65 err = JSONError{http.StatusBadRequest, "error: cannot delete yourself"}
66 return 66 return
67 } 67 }
68 68
69 if _, err = db.Exec(deleteUserSQL, user); err != nil { 69 var res sql.Result
70
71 if res, err = db.Exec(deleteUserSQL, user); err != nil {
72 return
73 }
74
75 if n, err2 := res.RowsAffected(); err2 == nil && n == 0 {
76 err = JSONError{
77 Code: http.StatusNotFound,
78 Message: fmt.Sprintf("Cannot find user %s.", user),
79 }
70 return 80 return
71 } 81 }
72 82
73 // Running in a go routine should not be necessary. 83 // Running in a go routine should not be necessary.
74 go func() { auth.ConnPool.Logout(user) }() 84 go func() { auth.ConnPool.Logout(user) }()