我正在使用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)?
答案 0 :(得分:1)
控制器中的load_and_authorize_resource
方法用于将资源加载到实例变量中,并为该控制器中的每个操作自动授权。型号和控制器可以单独授权。在你的ability.rb中,只需使用can :manage, Evaluate
来授权该模型。
如果你有一个用户模型并且其中有一个admin boolean字段,那么你可以按如下方式执行授权:
if user.admin?
can :manage, Evaluate
else
can :read, Evaluate
end
或者,您可以使用授权授权控制器操作!方法。
回答你的问题:我们如何在评估(模型)的评论(控制器)中实施cancan?
def index
@reviews = Evaluate.all
authorize! :read, @reviews
end