Commit c294172
committed
fix(user): use forward FK to look up Global_Role on profile / user / group save
Global_Role.user and Global_Role.group both use related_name="+" under
legacy authorization, so user.global_role / group.global_role are not
reverse accessors. The hasattr() guard always returned False, so the
profile / edit-user / edit-group save paths bound the form to a brand-
new Global_Role with no PK, then save() INSERTed a duplicate row,
violating the unique(user_id) / unique(group_id) constraint and 500'ing
the request — surfaced when a user tried to toggle ui_use_tailwind on
their own profile.
Look up the existing Global_Role via the forward FK
(Global_Role.objects.filter(user=...).first() and the group equivalent)
so save() UPDATEs the existing row instead.
Same fix applies to the delete_user authorization check that gates on
"is the target user a global-role holder?" — switched from the broken
hasattr to the forward-FK lookup.
Regression test in unittests/test_user_ui_timestamps.py seeds an
existing Global_Role for admin, POSTs /profile, and asserts no 500 +
no duplicate row.1 parent 8ebc439 commit c294172
3 files changed
Lines changed: 44 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
134 | 134 | | |
135 | 135 | | |
136 | 136 | | |
137 | | - | |
138 | | - | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
139 | 141 | | |
140 | 142 | | |
141 | 143 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| |||
257 | 257 | | |
258 | 258 | | |
259 | 259 | | |
260 | | - | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
261 | 264 | | |
262 | 265 | | |
263 | 266 | | |
| |||
422 | 425 | | |
423 | 426 | | |
424 | 427 | | |
425 | | - | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
426 | 431 | | |
427 | 432 | | |
428 | 433 | | |
| |||
521 | 526 | | |
522 | 527 | | |
523 | 528 | | |
524 | | - | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
525 | 532 | | |
526 | 533 | | |
527 | 534 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
0 commit comments