2012-11-19 138 views
2

我正在建立一個學校系統,教員可以在各自學校範圍內管理教室。Rails 3 CanCan授權範圍所有權

我有以下能力的設置相匹配:

class Ability 
    include CanCan::Ability 

    #define the user ability 
    def initialize(user) 
    user ||= User.new # guest user (not logged in)  
    if user.has_role? :instructor 
     can :manage, Classroom do |classroom| 
     classroom.new_record? && classroom.school_id == user.school_id || classroom.instructor == user 
     end 
    end 
    end 

end 

理論上,這應該使教師管理的新記錄,這將不會有他們與導師建立關係,只要教練和新的兩教室屬於同一所學校。

在我的教室新行動中,我從父母學校建造教室來容納這個@classroom = @school.classrooms.build。這會使用school_id初始化新課堂記錄,以便教員管理記錄。然而,在我的教室控制器中,我打電話給load_and_authorize_resource,授權教師在學校之前建立教室關係並引發CanCan授權異常。

有沒有辦法解決這個問題?

回答

3

CanCan可能在與學校建立聯繫之前檢查能力。您可以明確地創建和管理權限:

can :create, Classroom 
can :manage, Classroom, instructor_id: user.id 

然後檢查教室是否屬於教師的學校。

+0

當然,我想我對我的授權過於依賴cancan。有一點需要注意的是,語法'can:manage,Classroom,instructor == user'在cancan 1.6.8上看起來不太可行,我得到了未定義的局部變量或方法指導。然而,在教室裏面的工作可以阻止。 – Noz

+0

該語法可能只適用於屬性,不適用於關聯 - 請嘗試編輯後的版本。 – Thilo

+0

很好的嘗試,但仍然沒有骰子。儘管如此,稍微詳細一點並不是一個大問題。 – Noz