2013-08-03 85 views
0

我正在構建一個rails應用程序,它有兩個不同的資源,代表用戶類型 - 租戶和房東。Rails/CanCan:授權多個資源?

我對通過Devise設置的身份驗證以及使用CanCan對其中一個資源進行授權的身份驗證。

我不想讓它們成爲同一用戶資源的類型,因爲它們與應用程序中的其他資源(屬性belongs_to房東,但has_many租戶,例如)具有不同的關係。

我發現了很多關於如何爲具有多個角色的單個資源(例如具有管理員角色的用戶)設置康康科技的信息,但是我對如何處理多個資源同時。

任何人都可以指向正確的方向嗎?

回答

2

從我頭頂OK,你可以做這樣的事情:

--models >> ability.rb:

class Ability 
    include CanCan::Ability 

    def initialize(user) 

    if user.class.name=='Landlord' 
     can :manage, :all 
    elif user.class.name=='Tenant' 
     can :read, :all 
    else 
    can :read, :all 
    end 

    end 
end 
+0

這讓我在正確的方向。謝謝! – dmanaster

0

您可以將role列添加到users表用不同的角色填充這個字段。

$ rails generate migration AddRoleToUsers role:string 

更新models/ability.rb文件自定義的授權:

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    if user.nil? 
     can :read, :all 
    elsif user.role == "landlord" 
     can :manage, :all 
    elsif user.role == "tenant" 
     can :read, :all 
     can :create, ToDoList 
     can :update, ToDoList do |to_do_list| 
     to_do_list.user == user 
     end 
     can :destroy, ToDoList do |to_do_list| 
     to_do_list.user == user 
     end 
    end 
    end 
end 
+0

如果你這樣做,我會推薦easy_roles的寶石。它在github上可用,非常方便。 – Mattherick