Initial import from code branched by curzonj@gmail.com
[ruby-bugtrack.git] / app / controllers / application.rb
blobc494ae49b85f8304a2bef11ee772e1166167b22d
1 class ApplicationController < ActionController::Base
3   USER_PARAM = 'user'
4   RETURN_PARAM = 'return_to'
5   FILTER_PARAM = 'filter'
7   before_filter :verify_login
9   protected
11   def logged_user
12     session[USER_PARAM]
13   end
15   class FilterInfo
16     attr_reader :filters, :current
17     def initialize(user)
18       @filters = user.filters.collect{|f| f.to_hash}
19       @current = @filters.find{|fh| fh['id'] == user.filter_id}
20     end
22     def method_missing(name, *params)
23       return nil unless @current
24       return super unless @current.has_key? name.to_s
25       @current[name.to_s]
26     end
27   end
29   def set_filter(user = nil)
30     user = User.find(logged_user.id) unless user
31     session[FILTER_PARAM] = FilterInfo.new(user)
32   end
34   def verify_is_admin
35     user = logged_user
36     if user
37       return true if user.is_admin?
38       access_denied
39     end
40     true
41   end
43   def access_denied
44     flash.now['error'] = 'Login with admin privileges.'
45     render 'user/login'
46     return false
47   end
49   private
51   def verify_login
52     if logged_user.nil? && !%w{login public}.include?(action_name)
53       session[RETURN_PARAM] = @request.request_uri unless action_name == 'logoff'
54       render 'user/login'
55       return false
56     end
57     true
58   end
59 end