Description:
add TA roles
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r799:584294790340 - - 6 files changed: 71 inserted, 42 deleted

@@ -73,40 +73,39
73
73
74
74
75 def get_latest_submission_status
75 def get_latest_submission_status
76 @problem = Problem.find(params[:pid])
76 @problem = Problem.find(params[:pid])
77 @submission = Submission.find_last_by_user_and_problem(params[:uid],params[:pid])
77 @submission = Submission.find_last_by_user_and_problem(params[:uid],params[:pid])
78 respond_to do |format|
78 respond_to do |format|
79 format.js
79 format.js
80 end
80 end
81 end
81 end
82
82
83 # GET /submissions/:id/rejudge
83 # GET /submissions/:id/rejudge
84 def rejudge
84 def rejudge
85 @submission = Submission.find(params[:id])
85 @submission = Submission.find(params[:id])
86 @task = @submission.task
86 @task = @submission.task
87 @task.status_inqueue! if @task
87 @task.status_inqueue! if @task
88 respond_to do |format|
88 respond_to do |format|
89 format.js
89 format.js
90 end
90 end
91 end
91 end
92
92
93 protected
93 protected
94
94
95 def submission_authorization
95 def submission_authorization
96 #admin always has privileged
96 #admin always has privileged
97 - if @current_user.admin?
97 + return true if @current_user.admin?
98 - return true
98 + return true if @current_user.has_role?('TA') && (['show','download'].include? action_name)
99 - end
100
99
101 sub = Submission.find(params[:id])
100 sub = Submission.find(params[:id])
102 if @current_user.available_problems.include? sub.problem
101 if @current_user.available_problems.include? sub.problem
103 return true if GraderConfiguration["right.user_view_submission"] or sub.user == @current_user
102 return true if GraderConfiguration["right.user_view_submission"] or sub.user == @current_user
104 end
103 end
105
104
106 #default to NO
105 #default to NO
107 unauthorized_redirect
106 unauthorized_redirect
108 return false
107 return false
109 end
108 end
110
109
111
110
112 end
111 end
@@ -341,78 +341,75
341 user.contest_stat.reset_timer_and_save
341 user.contest_stat.reset_timer_and_save
342 end
342 end
343
343
344 if params[:notification_emails]
344 if params[:notification_emails]
345 send_contest_update_notification_email(user, contest)
345 send_contest_update_notification_email(user, contest)
346 end
346 end
347
347
348 note << user.login
348 note << user.login
349 users << user
349 users << user
350 end
350 end
351 end
351 end
352
352
353 if params[:reset_timer]
353 if params[:reset_timer]
354 logout_users(users)
354 logout_users(users)
355 end
355 end
356
356
357 flash[:notice] = 'User(s) ' + note.join(', ') +
357 flash[:notice] = 'User(s) ' + note.join(', ') +
358 ' were successfully modified. '
358 ' were successfully modified. '
359 redirect_to :action => 'contest_management'
359 redirect_to :action => 'contest_management'
360 end
360 end
361
361
362 # admin management
362 # admin management
363
363
364 def admin
364 def admin
365 - @admins = User.all.find_all {|user| user.admin? }
365 + @admins = Role.where(name: 'admin').take.users
366 + @tas = Role.where(name: 'ta').take.users
366 end
367 end
367
368
368 - def grant_admin
369 + def modify_role
369 - login = params[:login]
370 + user = User.find_by_login(params[:login])
370 - user = User.find_by_login(login)
371 + role = Role.find_by_name(params[:role])
371 - if user!=nil
372 + unless user && role
372 - admin_role = Role.find_by_name('admin')
373 + flash[:error] = 'Unknown user or role'
373 - user.roles << admin_role
374 + redirect_to admin_user_admin_index_path
374 - else
375 + return
375 - flash[:notice] = 'Unknown user'
376 - end
377 - flash[:notice] = 'User added as admins'
378 - redirect_to :action => 'admin'
379 end
376 end
380 -
377 + if params[:commit] == 'Grant'
381 - def revoke_admin
378 + #grant role
382 - user = User.find(params[:id])
379 + user.roles << role
383 - if user==nil
380 + flash[:notice] = "User '#{user.login}' has been granted the role '#{role.name}'"
384 - flash[:notice] = 'Unknown user'
381 + else
385 - redirect_to :action => 'admin' and return
382 + #revoke role
386 - elsif user.login == 'root'
383 + if user.login == 'root' && role.name == 'admin'
387 - flash[:notice] = 'You cannot revoke admisnistrator permission from root.'
384 + flash[:error] = 'You cannot revoke admisnistrator permission from root.'
388 - redirect_to :action => 'admin' and return
385 + redirect_to admin_user_admin_index_path
386 + return
389 end
387 end
390 -
388 + user.roles.delete(role)
391 - admin_role = Role.find_by_name('admin')
389 + flash[:notice] = "The role '#{role.name}' has been revoked from User '#{user.login}'"
392 - user.roles.delete(admin_role)
390 + end
393 - flash[:notice] = 'User permission revoked'
391 + redirect_to admin_user_admin_index_path
394 - redirect_to :action => 'admin'
395 end
392 end
396
393
397 # mass mailing
394 # mass mailing
398
395
399 def mass_mailing
396 def mass_mailing
400 end
397 end
401
398
402 def bulk_mail
399 def bulk_mail
403 lines = params[:login_list]
400 lines = params[:login_list]
404 if !lines or lines.blank?
401 if !lines or lines.blank?
405 flash[:notice] = 'You entered an empty list.'
402 flash[:notice] = 'You entered an empty list.'
406 redirect_to :action => 'mass_mailing' and return
403 redirect_to :action => 'mass_mailing' and return
407 end
404 end
408
405
409 mail_subject = params[:subject]
406 mail_subject = params[:subject]
410 if !mail_subject or mail_subject.blank?
407 if !mail_subject or mail_subject.blank?
411 flash[:notice] = 'You entered an empty mail subject.'
408 flash[:notice] = 'You entered an empty mail subject.'
412 redirect_to :action => 'mass_mailing' and return
409 redirect_to :action => 'mass_mailing' and return
413 end
410 end
414
411
415 mail_body = params[:email_body]
412 mail_body = params[:email_body]
416 if !mail_body or mail_body.blank?
413 if !mail_body or mail_body.blank?
417 flash[:notice] = 'You entered an empty mail body.'
414 flash[:notice] = 'You entered an empty mail body.'
418 redirect_to :action => 'mass_mailing' and return
415 redirect_to :action => 'mass_mailing' and return
@@ -60,49 +60,53
60 before_save :encrypt_new_password
60 before_save :encrypt_new_password
61 before_save :assign_default_site
61 before_save :assign_default_site
62 before_save :assign_default_contest
62 before_save :assign_default_contest
63
63
64 # this is for will_paginate
64 # this is for will_paginate
65 cattr_reader :per_page
65 cattr_reader :per_page
66 @@per_page = 50
66 @@per_page = 50
67
67
68 def self.authenticate(login, password)
68 def self.authenticate(login, password)
69 user = find_by_login(login)
69 user = find_by_login(login)
70 if user
70 if user
71 return user if user.authenticated?(password)
71 return user if user.authenticated?(password)
72 end
72 end
73 end
73 end
74
74
75 def authenticated?(password)
75 def authenticated?(password)
76 if self.activated
76 if self.activated
77 hashed_password == User.encrypt(password,self.salt)
77 hashed_password == User.encrypt(password,self.salt)
78 else
78 else
79 false
79 false
80 end
80 end
81 end
81 end
82
82
83 def admin?
83 def admin?
84 - self.roles.where(name: 'admin').count > 0
84 + has_role?('admin')
85 + end
86 +
87 + def has_role?(role)
88 + self.roles.where(name: role).count > 0
85 end
89 end
86
90
87 def email_for_editing
91 def email_for_editing
88 if self.email==nil
92 if self.email==nil
89 "(unknown)"
93 "(unknown)"
90 elsif self.email==''
94 elsif self.email==''
91 "(blank)"
95 "(blank)"
92 else
96 else
93 self.email
97 self.email
94 end
98 end
95 end
99 end
96
100
97 def email_for_editing=(e)
101 def email_for_editing=(e)
98 self.email=e
102 self.email=e
99 end
103 end
100
104
101 def alias_for_editing
105 def alias_for_editing
102 if self.alias==nil
106 if self.alias==nil
103 "(unknown)"
107 "(unknown)"
104 elsif self.alias==''
108 elsif self.alias==''
105 "(blank)"
109 "(blank)"
106 else
110 else
107 self.alias
111 self.alias
108 end
112 end
@@ -1,25 +1,54
1 - %h1 Administrators
1 + %h1 Modify Role
2 -
2 + .row
3 - %table{:class => 'info'}
3 + .col-md-6
4 - %tr{:class => 'info-head'}
4 + %h4 Administrators
5 + = form_tag modify_role_user_admin_index_path, method: 'post', class: 'form-inline' do
6 + = hidden_field_tag :role, 'admin'
7 + .form-group
8 + = label_tag :login, 'Grant admin role to:'
9 + = text_field_tag 'login',nil, class: 'form-control'
10 + .form-group
11 + = submit_tag 'Grant', class: 'btn btn-primary'
12 + %br
13 + %table.table.table-condense.table-hover.table-striped.table-bordered
14 + %thead{:class => 'info-head'}
5 %th #
15 %th #
6 %th Login
16 %th Login
7 %th Full name
17 %th Full name
8 %th
18 %th
9 - @admins.each_with_index do |user, i|
19 - @admins.each_with_index do |user, i|
10 %tr
20 %tr
11 %td= i+1
21 %td= i+1
12 %td= user.login
22 %td= user.login
13 %td= user.full_name
23 %td= user.full_name
14 %td
24 %td
15 - if user.login!='root'
25 - if user.login!='root'
16 - = link_to '[revoke]', :action => 'revoke_admin', :id => user.id
26 + = link_to '[revoke]', modify_role_user_admin_index_path( login: user.login, role: 'admin', commit: 'revoke')
17 - %hr
27 + .col-md-6
28 + %h4 Teacher Assistants (TA)
29 + = form_tag modify_role_user_admin_index_path, method: 'post', class: 'form-inline' do
30 + = hidden_field_tag :role, 'TA'
31 + .form-group
32 + = label_tag :login, 'Grant TA role to:'
33 + = text_field_tag 'login',nil, class: 'form-control'
34 + .form-group
35 + = submit_tag 'Grant', class: 'btn btn-primary'
36 + %br
37 + %table.table.table-condense.table-hover.table-striped.table-bordered
38 + %thead{:class => 'info-head'}
39 + %th #
40 + %th Login
41 + %th Full name
42 + %th
43 + - @tas.each_with_index do |user, i|
44 + %tr
45 + %td= i+1
46 + %td= user.login
47 + %td= user.full_name
48 + %td
49 + - if user.login!='root'
50 + = link_to '[revoke]', modify_role_user_admin_index_path( login: user.login, role: 'TA', commit: 'revoke')
18
51
19 - = form_tag :action => 'grant_admin' do
20 - = label_tag :login, 'Grant admin permission to:'
21 - = text_field_tag 'login',nil, class: 'input-field'
22 - = submit_tag 'Grant', class: 'btn btn-primary'
23
52
24 %hr/
53 %hr/
25 = link_to '[go back to index]', :action => 'index'
54 = link_to '[go back to index]', :action => 'index'
@@ -92,50 +92,49
92 member do
92 member do
93 get 'download'
93 get 'download'
94 get 'compiler_msg'
94 get 'compiler_msg'
95 get 'rejudge'
95 get 'rejudge'
96 end
96 end
97 collection do
97 collection do
98 get 'prob/:problem_id', to: 'submissions#index', as: 'problem'
98 get 'prob/:problem_id', to: 'submissions#index', as: 'problem'
99 get 'direct_edit_problem/:problem_id(/:user_id)', to: 'submissions#direct_edit_problem', as: 'direct_edit_problem'
99 get 'direct_edit_problem/:problem_id(/:user_id)', to: 'submissions#direct_edit_problem', as: 'direct_edit_problem'
100 get 'get_latest_submission_status/:uid/:pid', to: 'submissions#get_latest_submission_status', as: 'get_latest_submission_status'
100 get 'get_latest_submission_status/:uid/:pid', to: 'submissions#get_latest_submission_status', as: 'get_latest_submission_status'
101 end
101 end
102 end
102 end
103
103
104
104
105 #user admin
105 #user admin
106 resources :user_admin do
106 resources :user_admin do
107 collection do
107 collection do
108 match 'bulk_manage', via: [:get, :post]
108 match 'bulk_manage', via: [:get, :post]
109 get 'bulk_mail'
109 get 'bulk_mail'
110 get 'user_stat'
110 get 'user_stat'
111 get 'import'
111 get 'import'
112 get 'new_list'
112 get 'new_list'
113 get 'admin'
113 get 'admin'
114 get 'active'
114 get 'active'
115 get 'mass_mailing'
115 get 'mass_mailing'
116 - get 'revoke_admin'
116 + match 'modify_role', via: [:get, :post]
117 - post 'grant_admin'
118 match 'create_from_list', via: [:get, :post]
117 match 'create_from_list', via: [:get, :post]
119 match 'random_all_passwords', via: [:get, :post]
118 match 'random_all_passwords', via: [:get, :post]
120 end
119 end
121 member do
120 member do
122 get 'clear_last_ip'
121 get 'clear_last_ip'
123 end
122 end
124 end
123 end
125
124
126 resources :contest_management, only: [:index] do
125 resources :contest_management, only: [:index] do
127 collection do
126 collection do
128 get 'user_stat'
127 get 'user_stat'
129 get 'clear_stat'
128 get 'clear_stat'
130 get 'clear_all_stat'
129 get 'clear_all_stat'
131 get 'change_contest_mode'
130 get 'change_contest_mode'
132 end
131 end
133 end
132 end
134
133
135 #get 'user_admin', to: 'user_admin#index'
134 #get 'user_admin', to: 'user_admin#index'
136 #get 'user_admin/bulk_manage', to: 'user_admin#bulk_manage', as: 'bulk_manage_user_admin'
135 #get 'user_admin/bulk_manage', to: 'user_admin#bulk_manage', as: 'bulk_manage_user_admin'
137 #post 'user_admin', to: 'user_admin#create'
136 #post 'user_admin', to: 'user_admin#create'
138 #delete 'user_admin/:id', to: 'user_admin#destroy', as: 'user_admin_destroy'
137 #delete 'user_admin/:id', to: 'user_admin#destroy', as: 'user_admin_destroy'
139
138
140 #singular resource
139 #singular resource
141 #---- BEWARE ---- singular resource maps to plural controller by default, we can override by provide controller name directly
140 #---- BEWARE ---- singular resource maps to plural controller by default, we can override by provide controller name directly
@@ -204,48 +204,49
204 description='')
204 description='')
205 conf = (GraderConfiguration.find_by_key(key) ||
205 conf = (GraderConfiguration.find_by_key(key) ||
206 GraderConfiguration.new(:key => key,
206 GraderConfiguration.new(:key => key,
207 :value_type => value_type,
207 :value_type => value_type,
208 :value => default_value))
208 :value => default_value))
209 conf.description = description
209 conf.description = description
210 conf.save
210 conf.save
211 end
211 end
212
212
213 def seed_config
213 def seed_config
214 CONFIGURATIONS.each do |conf|
214 CONFIGURATIONS.each do |conf|
215 if conf.has_key? :description
215 if conf.has_key? :description
216 desc = conf[:description]
216 desc = conf[:description]
217 else
217 else
218 desc = ''
218 desc = ''
219 end
219 end
220 create_configuration_key(conf[:key],
220 create_configuration_key(conf[:key],
221 conf[:value_type],
221 conf[:value_type],
222 conf[:default_value],
222 conf[:default_value],
223 desc)
223 desc)
224 end
224 end
225 end
225 end
226
226
227 def seed_roles
227 def seed_roles
228 + Role.find_or_create_by(name: 'TA')
228 return if Role.find_by_name('admin')
229 return if Role.find_by_name('admin')
229
230
230 role = Role.create(:name => 'admin')
231 role = Role.create(:name => 'admin')
231 user_admin_right = Right.create(:name => 'user_admin',
232 user_admin_right = Right.create(:name => 'user_admin',
232 :controller => 'user_admin',
233 :controller => 'user_admin',
233 :action => 'all')
234 :action => 'all')
234 problem_admin_right = Right.create(:name=> 'problem_admin',
235 problem_admin_right = Right.create(:name=> 'problem_admin',
235 :controller => 'problems',
236 :controller => 'problems',
236 :action => 'all')
237 :action => 'all')
237
238
238 graders_right = Right.create(:name => 'graders_admin',
239 graders_right = Right.create(:name => 'graders_admin',
239 :controller => 'graders',
240 :controller => 'graders',
240 :action => 'all')
241 :action => 'all')
241
242
242 role.rights << user_admin_right;
243 role.rights << user_admin_right;
243 role.rights << problem_admin_right;
244 role.rights << problem_admin_right;
244 role.rights << graders_right;
245 role.rights << graders_right;
245 role.save
246 role.save
246 end
247 end
247
248
248 def seed_root
249 def seed_root
249 return if User.find_by_login('root')
250 return if User.find_by_login('root')
250
251
251 root = User.new(:login => 'root',
252 root = User.new(:login => 'root',
You need to be logged in to leave comments. Login now