我为用户提供了分层角色模型,超级用户>管理员>其他用户。 (我用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
答案 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