Ruby on Rails Monday, July 6, 2015

Can you share the content of session_help.rb?  In lieu of that...

I am offering very simple suggestions, which I think are true for both Rails 3 and 4.  You might want to explore the gem Devise for more spiffy user authentication.

On creation of a new user, in your database users table, do you set a flag to indicate whether or not the user is admin, let's say the field is 'is_admin' and 1 indicates admin and 0 indicates not admin.

The Controller informs your Model. 

When the user logs in,  you have a controller method that manages login.  You try to find the user by params like username, password, email or some combination...

User Controller:

def login   ## or whatever you use...
  @user = User.find ( params[:username] .....
  unless @user.blank?
     session[:user_id] =   @user.id   ##  Something I do...
     current_user = @user 
     ## current_user is a helper method, in my case it is located in my Application Controller... it is an instance of your current session user .  If current_user does not ring familiar, do a search for it on    
     ## your  application.  It may be in your Application controller.  If you can't find it, let me know...   Perhaps, your session_helper.rb is serving this function/purpose??  Maybe the instance names are not the same.
     ## Now current_user has been informed of admin status
.....
end

Now in your User model you need a def that returns admin status

Model

def is_admin?
     is_admin == 1  ?  true : false   ## or however you would like
end

So now in views and controllers, you can make a call to current_user.is_admin?:  eg, if  current_user.is_admin?   ..... content ... end

Hope this helps.

Liz

-By the way,  I have this funny feeling that you may be able to consolidate your user_temp_table and admin_table tables.  Perhaps in utilization of yes/no flags?  Would you might sharing the structure of each?
-And I deleted the above response,  my kid startled me and I hit some wrong keys that caused a posting of an incomplete response.....

On Monday, July 6, 2015 at 9:18:43 AM UTC-4, Padmahas Bn wrote:
Based on railstutorials.org, I've written my method to check whether it is admin or not inside sessions_helper.rb. Now in model I've to insert data to temporary table lets assume "user_temp_table", if it is normal user that has logged in. Later those entries will be approved by admin. If it is admin himself logged in I want to insert data to permanent table lets assume "admin_table".

Now where is the best place to call admin checking method which I have written inside sessions_helper.rb.
I have two possibilities.

1. Set a flag to 1 or 0 inside controller and access that flag variable from model if it is admin or user respectively.
Problem: But I found some blogs and stackoverflow posts stating that controller is just a bridge between view and model. And variables inside controller should not be accessed from model. Addition to that I don't know how to access controller variable from model. If this is the method please tell me how?

2. include SessionHelper inside model and call the method.

But posts I found related to both of these solutions are very old. So in rails 4 which is the valid and good way to carry out this task? Or is there is any other new way?

Thank you.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/83439a6b-3a7e-44e6-84f2-92e073083335%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment