Szukam najlepszego sposobu rozwiązania pewnego przypadku.
W aplikacji którą piszę muszę zaimplementować blokadę dostępu do jednego widoku. Blokada o tyle ma być nietypowa, że ma pozwalać na to aby tylko jeden użytkownik mógł w tym samym czasie oglądać ten widok (widok show dla konkretnego obiektu). Tak więc jeżeli któryś z użytkowników otworzy sobie podgląd tego obiektu to inny użytkownik podczas próby dostępu będzie musiał zobaczyć stosowny komunikat. Blokada ma być podtrzymywana do momentu aż użytkownik opuści ten widok (zamknie przeglądarkę, kartę w przeglądarce, twardy restart itp.).
Na chwilę obecną przychodzą mi do głowy dwa rozwiązania tego problemu.
- w widoku osadzam ajaxowy request (async) który co kilka sekund podbija blokadę obiektu w bazie danych. Po opuszczeniu widoku przestaną się wysyłać requesty i po kilku sec blokada ustąpi.
- jak ktoś otworzy widok wysłany zostanie request blokujący obiekt. W momencie opuszczenia widoku wysłany zostanie kolejny request przy pomocy metody w jquery
onbeforeunload
. Minusem tego rozwiązania będzie sytuacja w której nastąpi hardreset albo zawiesi się przeglądarka ponieważ nie odblokuje się wtedy dostęp do obiektu.
Macie jeszcze jakieś pomysły? Albo usprawnienia moich?