0

我正在使用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)? 
4

1 回答 1

1

控制器中的load_and_authorize_resource方法用于将资源加载到实例变量中,并为该控制器中的每个操作自动授权。模型和控制器可以单独授权。在您的ability.rb 中,只需使用can :manage, Evaluate来授权该模型。

如果您有一个用户模型并且其中有一个管理员布尔字段,那么您可以执行如下授权:

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

或者,您可以使用授权来授权控制器操作!方法。
回答您的问题:我们如何在具有 Evaluate(模型)的评论(控制器)中实现 cancan?

def index
  @reviews = Evaluate.all
  authorize! :read, @reviews
end
于 2013-03-29T05:08:34.863 回答