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:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
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 :a |
|
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'] |
|
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 ( |
|
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