Ami
2008-Oct-21 14:16 UTC
preventing the user from navigating away without completing a selection (not a form) link_to
Hi i have a page (assign role to user) in which i can add or remove a role. i have a people model that is tied to the user model with has one role , changing the role changes the person type thus, if you remove a role you can assign one of the 5 roles (admin, manager, instructor, staff, member) here''s where i want to make sure that the user( typically an Admin) assign any role for the selected user and wont leave this user without a role. if an Admin forget to assign a role the person (user / member or whatever) become a ghost. how can i make sure the user assign a role BEFORE they can navigate away from the page. i can easily check if user.roles.empty? then flash error and render / redirect but i tried after_filter on the controller which doesnt seem to be doing anything. thanks Ami --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Andrew Porter
2008-Oct-21 14:24 UTC
Re: preventing the user from navigating away without completing a selection (not a form) link_to
Ami wrote:> how can i make sure the user assign a role BEFORE they can navigate > away from the page.Basically you can''t. The user can navigate away by many means that are out of your control. You are better off coming at the problem from a different direction and, perhaps, having a default role that is there initially and the user either adds another role and removes the default (you can restrict removing the final role) or leaves it at default. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
You can''t force someone to do something before leaving a page since there''s always the back button, typing in a URL, etc. An after_filter won''t be very useful but what about a before_filter? With a before_filter you can check if there are any ghost users and redirect to the user role page to force them to choose a role for the ghost user. So, if they leave the role page after removing a role, they will be taken back to it until they choose a role. Will that work? If you have multiple admins you could store in the session the user that had a role removed and by which logged in admin to prevent it from redirecting admin A to set a role when it was admin B that removed the role. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Phillip Koebbe
2008-Oct-21 15:37 UTC
Re: preventing the user from navigating away without complet
It''s not a perfect solution, but you can use window.onbeforeunload (javascript) to check for some condition. The user still has the option of leaving, but at least they are notified that something is not right. In one app I work on, some "notifications" are collected as the administrator makes scheduling changes. We want to send all of the notifications at one time, so we let the admin continue to work and click a button when ready. In the event that the notifications have not been sent when the page unloads, a message pops up to let the admin know they haven''t finished the process. My JavaScript looks like: function notifications_check(evt) { if (pending_notifications) { var message = "There are pending notifications. By leaving this page before sending them, " + "you risk losing them completely. Are you sure you want to leave?" if (typeof evt == ''undefined'') { evt = window.event; } if (evt) { evt.returnValue = message; } return message; } } window.onbeforeunload = notifications_check; Peace. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hi Tim can I assign a default (lowest level) role (member) automatically when the user leaves the page? i was thinking maybe with the use of current_page check that the page has changed and then assign a default role automatically what do you think? Ami On Oct 21, 10:34 am, "Tim P." <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> You can''t force someone to do something before leaving a page since > there''s always the back button, typing in a URL, etc. An after_filter > won''t be very useful but what about a before_filter? > > With a before_filter you can check if there are any ghost users and > redirect to the user role page to force them to choose a role for the > ghost user. So, if they leave the role page after removing a role, they > will be taken back to it until they choose a role. > > Will that work? > > If you have multiple admins you could store in the session the user that > had a role removed and by which logged in admin to prevent it from > redirecting admin A to set a role when it was admin B that removed the > role. > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Tim Parkin
2008-Oct-22 14:58 UTC
Re: preventing the user from navigating away without complet
My first thought was to use a before_filter (only for pages that display member information that could expose a broken role) and check the referer to see if the user came from the roles page. If so, you could find any broken members and give them a default role. Thinking more about it, however, it seems like we''re avoiding the cause of the problem and trying to hack it. The real issue is that you shouldn''t allow admins to remove someone''s role in the first place. I now suggest changing your role page to let the admin change a role (not remove) _ or if you allow multiple roles let them only remove all but the lowest assigned role. Another option would be to keep it as is but check when a role is removed - if that member now has no roles then assign them a default one. I hope these ideas are of use. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
thanks Tim, i wanted to clarify how my app is built: it is based on http://crazyrails.com/how-to-install-restful-authentication/ i have a people STI table (admin, manager, instructor, staff, member) then i have user table (login info) with a has_one: person roles table which is a general 5 records table to store the access level / roles permissions which is a join table between people and roles so changing a role would be actually : select from a drop down then on the controller -> remove the previous role and reassign the selected one i think you''re 100% right, i''ll see if i can do that, let me know if you can think of anything else thanks man Ami On Oct 22, 10:58 am, Tim Parkin <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> My first thought was to use a before_filter (only for pages that display > member information that could expose a broken role) and check the > referer to see if the user came from the roles page. If so, you could > find any broken members and give them a default role. > > Thinking more about it, however, it seems like we''re avoiding the cause > of the problem and trying to hack it. The real issue is that you > shouldn''t allow admins to remove someone''s role in the first place. I > now suggest changing your role page to let the admin change a role (not > remove) _ or if you allow multiple roles let them only remove all but > the lowest assigned role. Another option would be to keep it as is but > check when a role is removed - if that member now has no roles then > assign them a default one. > > I hope these ideas are of use. > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---