Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails/CanCan:对多个资源的授权?_Ruby On Rails_Ruby On Rails 3_Cancan - Fatal编程技术网

Ruby on rails Rails/CanCan:对多个资源的授权?

Ruby on rails Rails/CanCan:对多个资源的授权?,ruby-on-rails,ruby-on-rails-3,cancan,Ruby On Rails,Ruby On Rails 3,Cancan,我正在构建一个rails应用程序,它有两种不同的资源来代表用户类型——租户和房东 我通过Desive设置了身份验证,并使用CanCan对其中一个资源进行了授权 我不想让它们成为同一用户资源的类型,因为它们与应用程序中的其他资源有不同的关系(例如,一个属性属于一个房东,但有许多租户) 我已经找到了很多关于如何为具有多个角色的单个资源(例如,具有管理员角色的用户)设置Cancan的信息,但是对于如何同时处理多个资源的授权,我却一无所获 有人能给我指出正确的方向吗?好的,从我的头顶,你可以这样做: -

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

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

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

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


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

好的,从我的头顶,你可以这样做:

--型号>>能力.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

您可以将
角色
列添加到
用户
表中,并使用不同的角色填充此字段

$ 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

如果你这样做,我会推荐easy_角色宝石。它在github上提供,非常方便。