javaeye3/lib/authentication_system.rb

137 lines
4.0 KiB
Ruby

module AuthenticationSystem
def self.included(controller)
controller.helper_method(:current_user, :current_ask_part, :logged_in?, :admin?, :editor?, :group_admin_of?, :new_user?) if controller.respond_to?(:helper_method)
end
def group_admin_required_of(board)
render_404 unless group_admin_of?(board)
end
protected
def login_required
login_by_token unless logged_in?
if logged_in?
if current_user.disable?
if request.xml_http_request?
render(:update, :status => 302){|page| page.redirect_to("/index/disable_user_notice")}
return false
else
render '/main/disable_user_notice', :layout => 'application'
end
elsif UnsafeUser.find_by_id_and_password(current_user.id, current_user.encrypted_password)
render '/main/unsafe_user_notice', :layout => 'application'
elsif new_user?
if request.xml_http_request?
render(:update, :status => 302){|page| page.redirect_to("/index/new_user_notice")}
return false
else
render '/main/new_user_notice', :layout => 'application'
end
elsif forum_actions? && (current_user.blocked? || !current_user.certified?)
if current_user.blocked?
redirect_to_action = "forum_blocked_notice"
elsif !current_user.certified?
redirect_to_action = "forum_certify"
end
if request.xml_http_request?
render(:update, :status => 302){|page| page.redirect_to("/index/#{redirect_to_action}")}
return false
else
redirect_to :controller => "/main", :action => redirect_to_action and return false
end
elsif not authorized?
flash[:error] = "您没有权限执行这项操作,请检查登录的账号是否正确"
redirect_to login_path
elsif current_user.name =~ /[@ ]/
if request.xml_http_request?
render(:update, :status => 302){|page| page.redirect_to("/index/rename")}
return false
else
redirect_to :controller => "/main", :action => "rename", :host => DEFAULT_SITE_DOMAIN
end
end
else
if request.xml_http_request?
render :update, :status => 401 do |page|
page << "if(confirm('您需要登录以后才能执行这个操作,现在要登录吗?')) window.location.href = '/login';"
end
else
session[:original_uri] = request.url if request.get? && !session[:original_uri]
flash[:error] = "请您先登录,才能继续操作"
redirect_to "http://#{DEFAULT_SITE_DOMAIN}/login"
end
end
end
def login_by_token
if cookies[:login_token] && !logged_in?
token = Base64.decode64(cookies[:login_token]).split(/_/)
user = User.find_by_id_and_encrypted_password(token.first.to_i, token.last)
if user.nil?
cookies[:login_token] = {:domain => DEFAULT_ROOT_DOMAIN ,:value => nil, :path => '/', :expires => Time.at(0)}
else
session[:user_id] = user.id
@current_user = user
end
end
end
def new_user?
current_user.new_registered?
end
def forum_actions?
false
end
def authorized?
true
end
def current_user
@current_user ||= ((session[:user_id] && User.find_by_id(session[:user_id])) || -1)
end
def current_ask_part
@_ask_part ||= current_user.ask_part if logged_in?
end
def logged_in?
current_user != -1
end
def admin?
logged_in? && current_user.admin?
end
def editor?
logged_in? && current_user.editor?
end
def editor_required
render_404 unless editor?
end
def group_admin?
@group_admin ||= group_admin_of?("groups")
end
def group_admin_of?(board)
(group? && ((logged_in? && @group.admin_by?(current_user)) || admin_of?(board)))
end
def group_admin_required
render_404 unless group_admin?
end
def redirect_or_remote_to(url)
if request.xhr?
render(:update, :status => 302){|page| page.redirect_to url}
return false
else
redirect_to url
end
end
end