Rails / CanCan:多种资源的授权?

时间:2013-08-03 19:19:14

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

我正在构建一个rails应用程序,它有两个不同的资源,代表用户类型 - 租户和房东。

我通过Devise进行身份验证,并使用CanCan对其中一个资源进行授权。

我不想让它们成为相同用户资源的类型,因为它们与应用程序中的其他资源有不同的关系(属性属于房东,但是有很多租户,例如)。

我已经找到了很多关于如何为具有多个角色的单个资源(例如具有管理员角色的用户)设置Cancan的信息,但是关于如何在同一时间处理多个资源的授权,我现在空了时间。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

从我的头脑中,你可以做到这样的事情:

- 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

答案 1 :(得分: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