Авторизация 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