Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 在具有多个型号的rails4中,使用cancancan gem,是否仅向特定用户授予特定型号的访问权限?_Ruby On Rails_Ruby_Devise_Cancancan - Fatal编程技术网

Ruby on rails 在具有多个型号的rails4中,使用cancancan gem,是否仅向特定用户授予特定型号的访问权限?

Ruby on rails 在具有多个型号的rails4中,使用cancancan gem,是否仅向特定用户授予特定型号的访问权限?,ruby-on-rails,ruby,devise,cancancan,Ruby On Rails,Ruby,Devise,Cancancan,我的rails 4应用程序中有5个模型,使用cancancan gem,我只想让特定用户访问特定模型 这意味着: 允许user1访问1,2模型 允许用户2访问3,4模型 允许用户3访问所有模型 请指导我。你应该用它来完成。您可以使用分配特定角色来表示您的“用户1”或“用户2”,如下所示: user = User.find(1) user.add_role :limited_user_1 你的“用户3”可以访问任何东西,可以是管理员 user = User.find(3) user.add_

我的rails 4应用程序中有5个模型,使用cancancan gem,我只想让特定用户访问特定模型

这意味着:

  • 允许user1访问1,2模型

  • 允许用户2访问3,4模型

  • 允许用户3访问所有模型

请指导我。

你应该用它来完成。您可以使用分配特定角色来表示您的“用户1”或“用户2”,如下所示:

user = User.find(1)
user.add_role :limited_user_1
你的“用户3”可以访问任何东西,可以是管理员

user = User.find(3)
user.add_role :admin
然后,只需检查
用户
是否具有指定的
角色
。在这种情况下,
:管理
意味着
用户
可以访问所有操作,例如
:读取
:创建
:更新
:销毁

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.admin?
      can :manage, :all
    elsif user.limited_user_1?
      can :manage, :model_1
      can :manage, :model_2
    elsif user.limited_user_2?
      can :manage, :model_3
      can :manage, :model_4
    end
  end
end

Mike的答案的简单版本如下:

#app/models/ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    case user.role_id
      when 1
         can :read, Model
         can :read, Model2
      when 2
         can :read, Model3
         can :read, Model4
      when 3 
         can, :manage, :all
    end
  end    
end

您必须添加一种方法来定义
用户是否是
1
2
3
等,这就是为什么
Mike
建议
rolify

没有真正意义的原因。用户无法“访问”模型。对你的应用程序发出请求的客户端与控制器交互。控制器将请求转换为模型层上的某种调用,这取决于您定义交互是什么。我认为这就是答案