2013-02-19 52 views
3

如何在不定義類能力的情況下定義cancan中的實例能力?如何定義cancan中的實例能力而不定義類能力?

我想允許:manage行動特別Course的情況下,不是Course類。

# ability.rb 
can :manage, Course do |course| 
    # Check if the user is a helper for this course 
    CourseRole.get_role(user, course) == "helper" 
end 

這個實例變量的正常工作:

# some_view.rb 
can? :manage, @course # checks the instance to see if :manage is allowed 

但是,如果我這樣做:

# some_view.rb 
can? :manage, Course 

它總是返回true,這是不好的。

一些背景:

class User < ActiveRecord::Base 
    has_many :course_roles 
    has_many :courses, :through => :course_roles 
    ... 
class CourseRoles < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :course 
    ... 
class Courses < ActiveRecord::Base 
    has_many :course_roles 
    has_many :users, :through => :course_roles 

回答

2

,而不是can? :manage, Course,您可以使用can? :manage, Course.new,並確保新課程的對象失敗你ability.rb

通過了塊