0

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

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

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

我找到了很多关于如何为具有多个角色的单个资源(例如,具有管理员角色的用户)设置 Cancan 的信息,但是对于如何同时处理多个资源的授权却一无所知。

谁能指出我正确的方向?

4

2 回答 2

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
于 2013-08-03T20:08:07.673 回答
0

您可以向表中添加一roleusers并使用不同的角色填充此字段。

$ 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
于 2013-08-03T20:17:04.003 回答