Авторизация cancan в несоответствующей модели и имени контроллера

Я использую канкан, но у меня небольшая проблема..

my ability.rb
can :manage, Department
can :manage, Review

У меня есть 2 случая, это работает для случая 1, но, к сожалению, не для случая 2

case 1

мой контролер отдела

 load_and_authorize_resource :message => "Unable to read this article."
  Here it works because in this controller 
  I use model Department

Теперь мой контроллер отзывов

 case 2



  class ReviewsController < ApplicationController


  load_and_authorize_resource :message => "Unable to read this article."
  layout 'system'
  respond_to :html, :json
  add_breadcrumb "Home", :root_url
  add_breadcrumb "Reviews", :reviews_path
  def index
   @page_title = "Reviews List"
    @reviews = Evaluate.all
  end
    def show
       @page_title = "Review setting of selected Job title"
       @review = Evaluate.find(params[:id])
    end

Как я могу решить эту проблему?

  Is there a fix rule in cancan that model name 
    should be related to the controller name?
    Departments(controller) should have Department(model)?
    How can we implement cancan in Reviews(controller) which have Evaluate(model)? 

1 ответ

Решение

load_and_authorize_resource Метод в вашем контроллере используется для загрузки ресурса в переменную экземпляра и авторизации его автоматически для каждого действия в этом контроллере. Модели и контроллеры могут быть отдельно авторизованы. В твоих способностях.рб просто используй can :manage, Evaluate разрешить эту модель.

Если у вас есть пользовательская модель и в ней есть логическое поле администратора, вы можете выполнить авторизацию следующим образом:

if user.admin?  
  can :manage, Evaluate   
else
  can :read, Evaluate   
end  

Кроме того, вы можете авторизовать действия контроллера, используя авторизацию! метод.
Ответ на ваш вопрос: Как мы можем внедрить cancan в Обзоры (контроллер), которые имеют Evaluate(модель)?

def index
  @reviews = Evaluate.all
  authorize! :read, @reviews
end
Другие вопросы по тегам