在具有许多模型的rails4中,使用cancancan gem,只允许特定用户访问特定模型?

时间:2015-12-18 06:26:36

标签: ruby-on-rails ruby devise cancancan

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

这意味着:

  • 允许user1访问1,2模型

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

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

请指导我。

2 个答案:

答案 0 :(得分:1)

您应该使用rolify with cancan来实现这一目标。您可以使用rolify指定某个角色来代表您的用户1"或"用户2"像这样:

sort()

和您的"用户3"可以访问所有内容的人可以是管理员

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

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

:destroy

答案 1 :(得分:0)

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

您必须添加一种方法来定义User123等,这就是为什么Mike建议rolify