Description:
[web] improved log-in & roles efficiency git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@196 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r104:7a05c208f2ec - - 6 files changed: 23 inserted, 10 deleted

@@ -1,10 +1,9
1 class AnnouncementsController < ApplicationController
1 class AnnouncementsController < ApplicationController
2
2
3 - before_filter :authenticate
3 + before_filter :admin_authorization
4 - before_filter { |controller| controller.authorization_by_roles(['admin'])}
5
4
6 in_place_edit_for :announcement, :published
5 in_place_edit_for :announcement, :published
7
6
8 # GET /announcements
7 # GET /announcements
9 # GET /announcements.xml
8 # GET /announcements.xml
10 def index
9 def index
@@ -4,30 +4,37
4 class ApplicationController < ActionController::Base
4 class ApplicationController < ActionController::Base
5 # Pick a unique cookie name to distinguish our session data from others'
5 # Pick a unique cookie name to distinguish our session data from others'
6 session :session_key => '_grader_session_id'
6 session :session_key => '_grader_session_id'
7
7
8 SINGLE_USER_MODE_CONF_KEY = 'system.single_user_mode'
8 SINGLE_USER_MODE_CONF_KEY = 'system.single_user_mode'
9
9
10 + def admin_authorization
11 + return false unless authenticate
12 + user = User.find(session[:user_id], :include => ['roles'])
13 + redirect_to :controller => 'main', :action => 'login' unless user.admin?
14 + end
15 +
10 def authorization_by_roles(allowed_roles)
16 def authorization_by_roles(allowed_roles)
11 return false unless authenticate
17 return false unless authenticate
12 user = User.find(session[:user_id])
18 user = User.find(session[:user_id])
13 unless user.roles.detect { |role| allowed_roles.member?(role.name) }
19 unless user.roles.detect { |role| allowed_roles.member?(role.name) }
14 flash[:notice] = 'You are not authorized to view the page you requested'
20 flash[:notice] = 'You are not authorized to view the page you requested'
15 redirect_to :controller => 'main', :action => 'login'
21 redirect_to :controller => 'main', :action => 'login'
16 return false
22 return false
17 end
23 end
18 end
24 end
19
25
20 protected
26 protected
27 +
21 def authenticate
28 def authenticate
22 unless session[:user_id]
29 unless session[:user_id]
23 redirect_to :controller => 'main', :action => 'login'
30 redirect_to :controller => 'main', :action => 'login'
24 return false
31 return false
25 end
32 end
26
33
27 - Configuration.reload
34 + #Configuration.reload
28 # check if run in single user mode
35 # check if run in single user mode
29 if (Configuration[SINGLE_USER_MODE_CONF_KEY])
36 if (Configuration[SINGLE_USER_MODE_CONF_KEY])
30 user = User.find(session[:user_id])
37 user = User.find(session[:user_id])
31 if user==nil or user.login != 'root'
38 if user==nil or user.login != 'root'
32 redirect_to :controller => 'main', :action => 'login'
39 redirect_to :controller => 'main', :action => 'login'
33 return false
40 return false
@@ -7,12 +7,17
7 end
7 end
8
8
9 def login
9 def login
10 if user = User.authenticate(params[:login], params[:password])
10 if user = User.authenticate(params[:login], params[:password])
11 session[:user_id] = user.id
11 session[:user_id] = user.id
12 redirect_to :controller => 'main', :action => 'list'
12 redirect_to :controller => 'main', :action => 'list'
13 + if user.admin?
14 + session[:admin] = true
15 + else
16 + session[:admin] = false
17 + end
13 else
18 else
14 flash[:notice] = 'Wrong password'
19 flash[:notice] = 'Wrong password'
15 redirect_to :controller => 'main', :action => 'login'
20 redirect_to :controller => 'main', :action => 'login'
16 end
21 end
17 end
22 end
18
23
@@ -2,15 +2,13
2
2
3 before_filter :authenticate
3 before_filter :authenticate
4
4
5 verify :method => :post, :only => ['create'],
5 verify :method => :post, :only => ['create'],
6 :redirect_to => { :action => 'list' }
6 :redirect_to => { :action => 'list' }
7
7
8 - before_filter :only => ['console','show'] do |controller|
8 + before_filter :admin_authorization, :only => ['console','show','reply']
9 - controller.authorization_by_roles(['admin'])
10 - end
11
9
12 def list
10 def list
13 @user = User.find(session[:user_id])
11 @user = User.find(session[:user_id])
14 @messages = Message.find_all_sent_by_user(@user)
12 @messages = Message.find_all_sent_by_user(@user)
15 end
13 end
16
14
@@ -2,13 +2,13
2 module ApplicationHelper
2 module ApplicationHelper
3
3
4 def user_header
4 def user_header
5 menu_items = ''
5 menu_items = ''
6 user = User.find(session[:user_id])
6 user = User.find(session[:user_id])
7
7
8 - if (user!=nil) and (user.admin?)
8 + if (user!=nil) and (session[:admin])
9 # admin menu
9 # admin menu
10 menu_items << "<b>Administrative task:</b> "
10 menu_items << "<b>Administrative task:</b> "
11 append_to menu_items, '[Announcements]', 'announcements', 'index'
11 append_to menu_items, '[Announcements]', 'announcements', 'index'
12 append_to menu_items, '[Msg console]', 'messages', 'console'
12 append_to menu_items, '[Msg console]', 'messages', 'console'
13 append_to menu_items, '[Problem admin]', 'problems', 'index'
13 append_to menu_items, '[Problem admin]', 'problems', 'index'
14 append_to menu_items, '[User admin]', 'user_admin', 'index'
14 append_to menu_items, '[User admin]', 'user_admin', 'index'
@@ -17,10 +17,14
17 %td
17 %td
18 = in_place_editor_field :configuration, :value_type, {}, :rows=>1
18 = in_place_editor_field :configuration, :value_type, {}, :rows=>1
19 %td
19 %td
20 = in_place_editor_field :configuration, :value, {}, :rows=>1
20 = in_place_editor_field :configuration, :value, {}, :rows=>1
21
21
22 %br/
22 %br/
23 - = link_to '[Reload configuration]', :action => 'reload'
23 + Your config is saved, but it does not automatically take effect.
24 %br/
24 %br/
25 - Your config is saved, but it does not automatically take effect.
25 + If you have one mongrel process running, you can
26 - You must reload.
26 + = link_to '[click]', :action => 'reload'
27 + here to reload.
28 + %br/
29 + If you have more than one process running, you should restart
30 + them manually.
You need to be logged in to leave comments. Login now