|
|
# Filters added to this controller apply to all controllers in the application.
|
|
|
# Likewise, all the methods added will be available for all controllers.
|
|
|
|
|
|
class ApplicationController < ActionController::Base
|
|
|
|
|
|
SINGLE_USER_MODE_CONF_KEY = 'system.single_user_mode'
|
|
|
|
|
|
def admin_authorization
|
|
|
return false unless authenticate
|
|
|
user = User.find(session[:user_id], :include => ['roles'])
|
|
|
redirect_to :controller => 'main', :action => 'login' unless user.admin?
|
|
|
end
|
|
|
|
|
|
def authorization_by_roles(allowed_roles)
|
|
|
return false unless authenticate
|
|
|
user = User.find(session[:user_id])
|
|
|
unless user.roles.detect { |role| allowed_roles.member?(role.name) }
|
|
|
flash[:notice] = 'You are not authorized to view the page you requested'
|
|
|
redirect_to :controller => 'main', :action => 'login'
|
|
|
return false
|
|
|
end
|
|
|
end
|
|
|
|
|
|
protected
|
|
|
|
|
|
def authenticate
|
|
|
unless session[:user_id]
|
|
|
redirect_to :controller => 'main', :action => 'login'
|
|
|
return false
|
|
|
end
|
|
|
|
|
|
#Configuration.reload
|
|
|
# check if run in single user mode
|
|
|
if (Configuration[SINGLE_USER_MODE_CONF_KEY])
|
|
|
user = User.find(session[:user_id])
|
|
|
if user==nil or user.login != 'root'
|
|
|
redirect_to :controller => 'main', :action => 'login'
|
|
|
return false
|
|
|
end
|
|
|
end
|
|
|
|
|
|
return true
|
|
|
end
|
|
|
|
|
|
def authorization
|
|
|
return false unless authenticate
|
|
|
user = User.find(session[:user_id])
|
|
|
unless user.roles.detect { |role|
|
|
|
role.rights.detect{ |right|
|
|
|
right.controller == self.class.controller_name and
|
|
|
(right.action == 'all' or right.action == action_name)
|
|
|
}
|
|
|
}
|
|
|
flash[:notice] = 'You are not authorized to view the page you requested'
|
|
|
#request.env['HTTP_REFERER'] ? (redirect_to :back) : (redirect_to :controller => 'login')
|
|
|
redirect_to :controller => 'main', :action => 'login'
|
|
|
return false
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def verify_time_limit
|
|
|
return true if session[:user_id]==nil
|
|
|
user = User.find(session[:user_id], :include => :site)
|
|
|
return true if user==nil or user.site == nil
|
|
|
if user.site.finished?
|
|
|
flash[:notice] = 'Error: the contest on your site is over.'
|
|
|
redirect_to :back
|
|
|
return false
|
|
|
end
|
|
|
return true
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
|