是否可以跟踪哪些用户创建其他用户? Ruby on Rails

时间:2013-05-28 20:53:11

标签: ruby-on-rails ruby cancan

我为用户提供了分层角色模型,超级用户>管理员>其他用户。 (我用cancan来实现这个) 超级用户应该能够访问所有其他用户的配置文件,但管理员应该只能访问他创建的用户的用户配置文件。 是否有可能像创建帖子/评论一样分配创建用户的所有权? 我的能力文件目前看起来如下:

class Ability
include CanCan::Ability

def initialize(user)
  user ||= User.new
  if user.status == "Super User"  
    can :manage, :all
  elsif user.status == "Admin"
    can :create, User           
    can :show, User, :id => user.id
    can :update, User, :id => user.id

end

1 个答案:

答案 0 :(得分:1)

当然,您只需要在数据库中跟踪它。例如,您可以在用户数据库中添加“creator_id”字段,该字段存储创建用户的ID(管理员或超级用户)。

在您的用户模型中,您可以执行以下操作:

belongs_to :creator, class_name: 'User'

然后在你的能力中:

class Ability
include CanCan::Ability

def initialize(user)
  user ||= User.new
  if user.status == "Super User"  
    can :manage, :all
  elsif user.status == "Admin"
    can :create, User           
    can [:show, :update], User, :id => user.id
    can [:show, :update], User, :creator_id => user.id
  end
end

我已将您的show / update行组合在一起,以便管理员可以查看或更新他/她自己。然后我添加了另一个can行,以便管理员可以显示/更新当前用户创建的任何用户。

编辑:

无论您在何处创建用户,我都猜测current_user会是管理员,是吗?您只需设置用户的creator属性:

user = User.new(name: 'Foo Bar') # or however you are doing it
user.creator = current_user
user.save