0

我有一个分层的用户角色模型,超级用户 > 管理员 > 其他用户。(我正在使用 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
4

1 回答 1

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

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

编辑:

无论您在哪里创建用户,我猜current_user都是管理员,是吗?您可以设置用户的creator属性,然后:

user = User.new(name: 'Foo Bar') # or however you are doing it
user.creator = current_user
user.save
于 2013-05-28T20:56:43.560 回答