aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKir2011-11-17 14:35:45 +0400
committerKir2011-11-17 14:35:45 +0400
commitabcb2bf3ec5adfd5111049d2dd15093e3917041f (patch)
treed18da24411ca619b2dd33212e2a3d41a473dfb2e
parent668fde12b58214c3cfa8721958e6c29af0e57423 (diff)
downloadinboxes-abcb2bf3ec5adfd5111049d2dd15093e3917041f.tar.bz2
Switched to CanCan
-rw-r--r--app/controllers/inboxes/base_controller.rb4
-rw-r--r--app/controllers/inboxes/discussions_controller.rb14
-rw-r--r--app/controllers/inboxes/messages_controller.rb16
-rw-r--r--app/controllers/inboxes/speakers_controller.rb16
-rw-r--r--app/views/inboxes/discussions/index.html.haml2
-rw-r--r--config/locales/ru.yml4
-rw-r--r--inboxes.gemspec1
-rw-r--r--lib/inboxes/ability.rb24
-rw-r--r--lib/inboxes/engine.rb5
9 files changed, 60 insertions, 26 deletions
diff --git a/app/controllers/inboxes/base_controller.rb b/app/controllers/inboxes/base_controller.rb
index 54767d2..da116a0 100644
--- a/app/controllers/inboxes/base_controller.rb
+++ b/app/controllers/inboxes/base_controller.rb
@@ -1,3 +1,7 @@
class Inboxes::BaseController < ApplicationController
+ private
+ def init_discussion
+ @discussion = Discussion.find(params[:discussion_id])
+ end
end \ No newline at end of file
diff --git a/app/controllers/inboxes/discussions_controller.rb b/app/controllers/inboxes/discussions_controller.rb
index d901a80..ecc63f4 100644
--- a/app/controllers/inboxes/discussions_controller.rb
+++ b/app/controllers/inboxes/discussions_controller.rb
@@ -1,6 +1,7 @@
class Inboxes::DiscussionsController < Inboxes::BaseController
- before_filter :authenticate_user!
- before_filter :init_and_check_permissions, :only => :show
+ load_and_authorize_resource
+ # before_filter :authenticate_user!
+ # before_filter :init_and_check_permissions, :only => :show
before_filter :load_and_check_discussion_recipient, :only => [:create, :new]
def index
@@ -10,6 +11,7 @@ class Inboxes::DiscussionsController < Inboxes::BaseController
# GET /discussions/1
# GET /discussions/1.json
def show
+ # @discussion = Discussion.includes(:messages, :speakers).find(params[:id])
@discussion.mark_as_read_for(current_user)
end
@@ -40,10 +42,10 @@ class Inboxes::DiscussionsController < Inboxes::BaseController
private
- def init_and_check_permissions
- @discussion = Discussion.includes(:messages, :speakers).find(params[:id])
- redirect_to discussions_url, :notice => t("inboxes.discussions.can_not_participate") unless @discussion.can_participate?(current_user)
- end
+ # def init_and_check_permissions
+ # @discussion = Discussion.includes(:messages, :speakers).find(params[:id])
+ # redirect_to discussions_url, :notice => t("inboxes.discussions.can_not_participate") unless @discussion.can_participate?(current_user)
+ # end
def load_and_check_discussion_recipient
# initializing model fir new and create actions
diff --git a/app/controllers/inboxes/messages_controller.rb b/app/controllers/inboxes/messages_controller.rb
index 1c63221..4089b13 100644
--- a/app/controllers/inboxes/messages_controller.rb
+++ b/app/controllers/inboxes/messages_controller.rb
@@ -1,10 +1,10 @@
class Inboxes::MessagesController < Inboxes::BaseController
+ # before_filter :init_discussion
+ # load_and_authorize_resource
+ load_and_authorize_resource :discussion
+ load_resource :message, :through => :discussion, :shallow => true
def create
- @discussion = Discussion.find(params[:discussion_id])
- redirect_to root_url, :notice => t("inboxes.discussions.can_not_participate") unless @discussion.can_participate?(current_user)
-
- @message = Message.new(params[:message])
@message.user = current_user
@message.discussion = @discussion
@message.save
@@ -14,5 +14,11 @@ class Inboxes::MessagesController < Inboxes::BaseController
format.js
end
end
-
+
+ # private
+ #
+ # def init_and_check_permissions
+ # @discussion = Discussion.find(params[:discussion_id])
+ # redirect_to discussions_url, :notice => t("inboxes.discussions.can_not_participate") unless @discussion.can_participate?(current_user)
+ # end
end
diff --git a/app/controllers/inboxes/speakers_controller.rb b/app/controllers/inboxes/speakers_controller.rb
index 035df98..96a3049 100644
--- a/app/controllers/inboxes/speakers_controller.rb
+++ b/app/controllers/inboxes/speakers_controller.rb
@@ -1,12 +1,13 @@
class Inboxes::SpeakersController < Inboxes::BaseController
- before_filter :init_and_check_permissions
+ # before_filter :init_discussion
+ load_and_authorize_resource :discussion
+ load_resource :speaker, :through => :discussion, :shallow => true
+ # load_and_authorize_resource
def create
- # check permissions
raise ActiveRecord::RecordNotFound unless params[:speaker] && params[:speaker][:user_id]
@user = User.find(params[:speaker][:user_id])
-
- flash[:notice] = t("views.speakers.added") if @discussion.add_speaker(@user)
+ flash[:notice] = t("inboxes.speakers.added") if @discussion.add_speaker(@user)
redirect_to @discussion
end
@@ -16,11 +17,4 @@ class Inboxes::SpeakersController < Inboxes::BaseController
flash[:notice] = @speaker.user == current_user ? t("inboxes.discussions.leaved") : t("inboxes.speakers.removed")
redirect_to @discussion.speakers.any? && @discussion.can_participate?(current_user) ? @discussion : discussions_url
end
-
- private
-
- def init_and_check_permissions
- @discussion = Discussion.find(params[:discussion_id])
- redirect_to discussions_url, :notice => t("inboxes.discussions.can_not_participate") unless @discussion.can_participate?(current_user)
- end
end
diff --git a/app/views/inboxes/discussions/index.html.haml b/app/views/inboxes/discussions/index.html.haml
index 7c4de6e..86ae297 100644
--- a/app/views/inboxes/discussions/index.html.haml
+++ b/app/views/inboxes/discussions/index.html.haml
@@ -1,6 +1,4 @@
%h1 Discussions list
-%p
- Unread messages:
%table
%tr
%th Last message
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 7bcbbef..1258f9f 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -13,5 +13,5 @@ ru:
can_not_participate: "Вы не состоите в этой дискуссии"
choose_at_least_one_recipient: "Укажите хотя бы одного получателя"
speakers:
- added: "Участник дискуссии добавлен"
- removed: "Участник дискуссии удален" \ No newline at end of file
+ added: "Собеседник успешно добавлен"
+ removed: "Собеседник удален" \ No newline at end of file
diff --git a/inboxes.gemspec b/inboxes.gemspec
index be61064..fac2df0 100644
--- a/inboxes.gemspec
+++ b/inboxes.gemspec
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
# specify any dependencies here; for example:
# s.add_development_dependency "ruby-debug"
s.add_runtime_dependency "haml-rails"
+ s.add_runtime_dependency "cancan"
# s.add_runtime_dependency "inherited_resources"
# s.add_development_dependency 'dm-sqlite-adapter', ['>= 1.1.0']
diff --git a/lib/inboxes/ability.rb b/lib/inboxes/ability.rb
new file mode 100644
index 0000000..18fca88
--- /dev/null
+++ b/lib/inboxes/ability.rb
@@ -0,0 +1,24 @@
+module Inboxes
+ class InboxesAbility
+ include CanCan::Ability
+
+ def initialize(user)
+ # Discussion
+ can [:index, :create], Discussion
+ can :read, Discussion do |discussion|
+ discussion.can_participate?(user)
+ end
+
+ # Message
+ # can :create, Message do |message|
+ # message.discussion.can_participate?(user)
+ # end
+ #
+ # # Speaker
+ # can [:create, :destroy], Speaker do |speaker|
+ # speaker.discussion.can_participate?(user)
+ # end
+ end
+ end
+
+end \ No newline at end of file
diff --git a/lib/inboxes/engine.rb b/lib/inboxes/engine.rb
index 061694e..4395cde 100644
--- a/lib/inboxes/engine.rb
+++ b/lib/inboxes/engine.rb
@@ -1,4 +1,9 @@
+require "inboxes/ability"
+
module Inboxes
class Engine < ::Rails::Engine
+ def self.activate
+ Ability.register_ability(InboxesAbility)
+ end
end
end \ No newline at end of file