在具有许多模型的 rails4 中,使用 cancancan gem,仅授予特定用户对特定模型的访问权限?

In rails4 having many models, using cancancan gem, grant access to specific user to a specific model only?

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

这意味着:

请指导我。

您应该使用 rolify with cancan to accomplish that. You can assign a certain role with rolify 来表示您的 "user 1" 或 "user 2",如下所示:

user = User.find(1)
user.add_role :limited_user_1

而您有权访问所有内容的 "user 3" 可以是管理员

user = User.find(3)
user.add_role :admin

然后使用 cancan 就像检查 user 是否具有指定的 role 一样简单。在这种情况下 :manage 表示 user 可以访问所有操作,例如 :read:create:update:destroy.

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

您必须添加一种方法来定义 User 是否为 123 等,这就是 Mike 的原因建议 rolify.