@startuml actor Alice #FFBBBB actor Bob #BBBBFF == Advisory Lock: single user == Alice -> form: open page form -> Alice: form Alice -> Alice: edit (first change) Alice -> dirty: action=lock activate dirty #FFBBBB dirty -> Alice: status=success, lock_timeout=<secs> ... Alice -> Alice: edit (more changes) note over Alice: Client will extend lock automatically,\nif there are changes during last timeout period Alice -> dirty: action=extend dirty -> Alice: status=success ... Alice -> save: POST form save -> dirty: lock valid? dirty -> save: yes save -> save: save form save -> dirty: action=release deactivate dirty save -> Alice: status=succes,redirect=client == Advisory Lock: multi user == Alice -> form: open page form -> Alice: form Alice -> Alice: edit (first change) Alice -> dirty: action=lock activate dirty #FFBBBB dirty -> Alice: status=success, lock_timeout=<secs> ... Bob -> form: open page form -> Bob: form ... Bob -> Bob: edit (first change) Bob -> dirty: action=lock dirty -> Bob: status=**conflict_allow_force**,\nmessage=Record locked by user Alice note right: User Bob can decide between a) reload and b) overwrite. ... alt Bob: overwrite Bob -> Bob: can edit and receive no more warnings Bob -> save: Post form save -> dirty: lock type 'Advisory'? yes >> always allow write. save -> save: save form save -> dirty: action=release deactivate dirty save -> Bob: status=succes,redirect=client else Bob: reload Bob -> Bob: reload page end Alice -> save: Post form save -> dirty: record modified. Message: Reload form. @enduml