Skip to content

Commit 0b41395

Browse files
committed
Merge remote-tracking branch 'origin/feat/saml-auth' into feat/saml-auth
2 parents 4b8844e + a011b02 commit 0b41395

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

flask_appbuilder/security/sqla/manager.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,15 @@ def count_users(self):
284284

285285
def update_user(self, user):
286286
try:
287+
# Load existing user from DB to detect role/group changes
288+
existing_user = self.session.get(self.user_model, user.id)
289+
290+
roles_changed = set(existing_user.roles) != set(user.roles)
291+
groups_changed = set(existing_user.groups) != set(user.groups)
292+
293+
if roles_changed or groups_changed:
294+
user.changed_on = datetime.utcnow() # pragma: no cover
295+
287296
self.session.merge(user)
288297
self.session.commit()
289298
log.info(c.LOGMSG_INF_SEC_UPD_USER, user)

tests/test_security_manager.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
def test_user_changed_on_updates_on_role_change(appbuilder):
2+
sm = appbuilder.sm
3+
4+
role = sm.add_role("TestRole")
5+
6+
user = sm.add_user(
7+
username="test_user",
8+
first_name="Test",
9+
last_name="User",
10+
email="test_user@test.com",
11+
password="password",
12+
)
13+
14+
before = user.changed_on
15+
assert before is not None
16+
17+
user.roles.append(role)
18+
sm.update_user(user)
19+
20+
assert user.changed_on > before

0 commit comments

Comments
 (0)