我正在使用设计并让管理员使用Manage::UsersController
.
这是使用 cancan 锁定的:
# models/ability.rb
def initialize(user)
if user admin?
can :manage, User
end
end
普通用户只能通过设计与用户无关,因此一切看起来都很安全。
现在我想为用户提供一个“显示”页面来显示他们自己的帐户信息(而不是自定义设计“编辑”页面)。建议(1 , 2 , 3)似乎是添加带有 show 方法的 users_controller 。
我试图让非管理员能够阅读他们自己的信息:
if user admin?
can :manage, User
else
can :read, User, :id => user.id # edited based on @Edwards's answer
end
但是,这似乎并没有限制对 的访问Manage::UsersController#index
,因此这意味着每个人都可以看到所有用户的列表。
实现这一目标的最简单方法是什么?我可以看到两个选项,(但我不确定是否正确):
1) 阻止用户访问Manage::UsersController#index
def index
@users = User.all
authorize! :manage, User # feels hackish because this is 'read' action
end
2) 覆盖设计控制器
根据这个答案,重写设计控制器可能是一个好方法,但问题是哪个控制器(注册控制器?)以及如何。我对这条路线的担忧之一是我想要显示的信息与用户对象有关,但不是专门设计的(即用户计划信息等)。我也担心在尝试测试时会陷入困境。
你有什么建议吗?