summaryrefslogtreecommitdiff
path: root/app/controllers/application_controller.rb
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>2011-10-09 00:36:38 +0300
committerDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>2011-10-09 00:36:38 +0300
commite98c77857f9f765d1854b92c2dc33049504a596d (patch)
tree52fbfc1cdb55df21843965479c97be0c91121a9a /app/controllers/application_controller.rb
parent0f43e98ef8c2da8908b1107f75b67cda2572c2c4 (diff)
downloadgitlab-ce-0.9.4.tar.gz
init commitv0.9.4
Diffstat (limited to 'app/controllers/application_controller.rb')
-rw-r--r--app/controllers/application_controller.rb40
1 files changed, 40 insertions, 0 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
new file mode 100644
index 00000000000..09c44502cdf
--- /dev/null
+++ b/app/controllers/application_controller.rb
@@ -0,0 +1,40 @@
+class ApplicationController < ActionController::Base
+ before_filter :authenticate_user!
+ protect_from_forgery
+
+ helper_method :abilities, :can?
+
+ protected
+
+ def abilities
+ @abilities ||= Six.new
+ end
+
+ def can?(object, action, subject)
+ abilities.allowed?(object, action, subject)
+ end
+
+ def project
+ @project ||= Project.find_by_code(params[:project_id])
+ end
+
+ def add_project_abilities
+ abilities << Ability
+ end
+
+ def authenticate_admin!
+ return redirect_to(new_user_session_path) unless current_user.is_admin?
+ end
+
+ def authorize_project!(action)
+ return redirect_to(new_user_session_path) unless can?(current_user, action, project)
+ end
+
+ def method_missing(method_sym, *arguments, &block)
+ if method_sym.to_s =~ /^authorize_(.*)!$/
+ authorize_project!($1.to_sym)
+ else
+ super
+ end
+ end
+end