69 lines
1.8 KiB
Ruby
69 lines
1.8 KiB
Ruby
class ApplicationController < ActionController::Base
|
|
protect_from_forgery
|
|
before_filter :set_current_user
|
|
after_filter :reset_current_user
|
|
before_filter :initialize_cookies
|
|
layout "default"
|
|
|
|
protected
|
|
def access_denied
|
|
previous_url = params[:url] || request.request_uri
|
|
|
|
respond_to do |fmt|
|
|
fmt.html do
|
|
if request.get? && Rails.env.test?
|
|
redirect_to new_session_path(:url => previous_url), :notice => "Access denied"
|
|
else
|
|
redirect_to new_session_path, :notice => "Access denied"
|
|
end
|
|
end
|
|
fmt.xml do
|
|
render :xml => {:success => false, :reason => "access denied"}.to_xml(:root => "response"), :status => 403
|
|
end
|
|
fmt.json do
|
|
render :json => {:success => false, :reason => "access denied"}.to_json, :status => 403
|
|
end
|
|
end
|
|
end
|
|
|
|
def set_current_user
|
|
if session[:user_id]
|
|
CurrentUser.user = User.find_by_id(session[:user_id])
|
|
CurrentUser.ip_addr = request.remote_ip
|
|
end
|
|
|
|
if CurrentUser.user
|
|
if CurrentUser.user.is_banned? && CurrentUser.user.ban && CurrentUser.user.ban.expires_at < Time.now
|
|
CurrentUser.user.unban!
|
|
end
|
|
else
|
|
CurrentUser.user = AnonymousUser.new
|
|
end
|
|
|
|
Time.zone = CurrentUser.user.time_zone
|
|
end
|
|
|
|
def reset_current_user
|
|
CurrentUser.user = nil
|
|
CurrentUser.ip_addr = nil
|
|
end
|
|
|
|
%w(member banned privileged contributor janitor moderator admin).each do |level|
|
|
define_method("#{level}_only") do
|
|
if CurrentUser.user.__send__("is_#{level}?")
|
|
true
|
|
else
|
|
access_denied()
|
|
end
|
|
end
|
|
end
|
|
|
|
def initialize_cookies
|
|
if CurrentUser.user.is_anonymous?
|
|
cookies["blacklisted_tags"] = ""
|
|
else
|
|
cookies["blacklisted_tags"] = CurrentUser.user.blacklisted_tags
|
|
end
|
|
end
|
|
end
|