cancan授权在无与伦比的模型和控制器名称中

时间:2013-03-29 03:56:10

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 cancan

我正在使用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 个答案:

答案 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