bousquet / tableau

Open source photo gallery in Rails

This URL has Read+Write access

bousquet (author)
Wed Feb 27 22:08:28 -0800 2008
commit  b098aed6b903530d2f7e73842b2f57d63a15660c
tree    08494945cceb3764ba0d943764b64b2f7c211cc1
parent  85cde87a0b62aea3183f02e802efdeec663cb0ee
tableau / lib / authenticated_system.rb
100644 107 lines (95 sloc) 3.029 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
module AuthenticatedSystem
  protected
  def logged_in?
    current_user
  end
 
  # accesses the current user from the session.
  # overwrite this to set how the current user is retrieved from the session.
  # To store just the whole user model in the session:
  #
  # def current_user
  # session[:user]
  # end
  #
  def current_user
    @current_user ||= session[:user] ? User.find_by_id(session[:user]) : nil
  end
 
  # store the given user in the session. overwrite this to set how
  # users are stored in the session. To store the whole user model, do:
  #
  # def current_user=(new_user)
  # session[:user] = new_user
  # end
  #
  def current_user=(new_user)
    session[:user] = new_user.nil? ? nil : new_user.id
    @current_user = new_user
  end
 
  # overwrite this if you want to restrict access to only a few actions
  # or if you want to check if the user has the correct rights
  # example:
  #
  # # only allow nonbobs
  # def authorize?(user)
  # user.login != "bob"
  # end
  def authorized?(user)
     true
  end
 
  # overwrite this method if you only want to protect certain actions of the controller
  # example:
  #
  # # don't protect the login and the about method
  # def protect?(action)
  # if ['action', 'about'].include?(action)
  # return false
  # else
  # return true
  # end
  # end
  def protect?(action)
    true
  end
 
  # To require logins, use:
  #
  # before_filter :login_required # restrict all actions
  # before_filter :login_required, :only => [:edit, :update] # only restrict these actions
  #
  # To skip this in a subclassed controller:
  #
  # skip_before_filter :login_required
  #
  def login_required
    # skip login check if action is not protected
    return true unless protect?(action_name)
 
    # check if user is logged in and authorized
    return true if logged_in? and authorized?(current_user)
 
    # store current location so that we can
    # come back after the user logged in
    store_location
 
    # call overwriteable reaction to unauthorized access
    access_denied and return false
  end
 
  # overwrite if you want to have special behavior in case the user is not authorized
  # to access the current operation.
  # the default action is to redirect to the login screen
  # example use :
  # a popup window might just close itself for instance
  def access_denied
    redirect_to :controller=>"/account", :action =>"login"
  end
 
  # store current uri in the session.
  # we can return to this location by calling return_location
  def store_location
    session[:return_to] = request.request_uri
  end
 
  # move to the last store_location call or to the passed default one
  def redirect_back_or_default(default)
    session[:return_to] ? redirect_to_url(session[:return_to]) : redirect_to(default)
    session[:return_to] = nil
  end
 
  # adds ActionView helper methods
  def self.included(base)
    base.send :helper_method, :current_user, :logged_in?
  end
end