diff options
| author | Kir | 2011-11-17 14:35:45 +0400 | 
|---|---|---|
| committer | Kir | 2011-11-17 14:35:45 +0400 | 
| commit | abcb2bf3ec5adfd5111049d2dd15093e3917041f (patch) | |
| tree | d18da24411ca619b2dd33212e2a3d41a473dfb2e | |
| parent | 668fde12b58214c3cfa8721958e6c29af0e57423 (diff) | |
| download | inboxes-abcb2bf3ec5adfd5111049d2dd15093e3917041f.tar.bz2 | |
Switched to CanCan
| -rw-r--r-- | app/controllers/inboxes/base_controller.rb | 4 | ||||
| -rw-r--r-- | app/controllers/inboxes/discussions_controller.rb | 14 | ||||
| -rw-r--r-- | app/controllers/inboxes/messages_controller.rb | 16 | ||||
| -rw-r--r-- | app/controllers/inboxes/speakers_controller.rb | 16 | ||||
| -rw-r--r-- | app/views/inboxes/discussions/index.html.haml | 2 | ||||
| -rw-r--r-- | config/locales/ru.yml | 4 | ||||
| -rw-r--r-- | inboxes.gemspec | 1 | ||||
| -rw-r--r-- | lib/inboxes/ability.rb | 24 | ||||
| -rw-r--r-- | lib/inboxes/engine.rb | 5 | 
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 | 
