与devise一起使用cancancan时,devise是否需要添加到ability.rb?

When using cancancan with devise, does devise need to be added to ability.rb?

问题:当使用cancancan进行授权,devise进行身份验证时,我是否必须为应用程序的devise部分定义任何授权,或者devise自己处理一切?

例子

例如,对于(所有)其他资源,我们应该将 load_and_authorize_resource 放在该资源的控制器中,以防止不应访问它的用户这样做。然后,为了允许那些应该有权访问的人访问,我们可以 define abilities 通过将这样的代码添加到 ability.rb:

# ability.rb

can [:index, :show], [Patient], user_id: user.id

回到我的问题 - 我是否必须将 load_and_authorize_resource 添加到任何设备的控制器并在 ability.rb 中定义设备控制器的权限?或者设计是否可以在开发人员无需做任何事情的情况下解决所有这些问题?

我们显然不想让一个用户更改另一个用户的帐户信息!

重要的是要区分帐户信息的设计授权部分(会话 creation/logout/email+密码+restoration/changing 如果启用)和任何其他与之相关的自定义逻辑和数据(例如 -名称、鞋码等)保存在内部或访问同一型号。

设计控制器,如果您没有对其进行太多更改 - 非常简单并且不需要额外的访问控制,因为根据设计用户只能编辑他们自己的身份验证数据(他们根本不处理来自外部的用户 ID,因此没有办法篡改它)。此外,仅添加 load_and_authorize_resource 至少不会有任何效果,或者更可能会干扰现有的设计代码,因为它不是围绕 cancancan 设计的。

但是如果您有自己的用户配置文件控制器,例如用户索引、管理员编辑其他人的配置文件等 - 显然,您必须在那里促进访问控制。