首页 > 解决方案 > 用devise使用cancancan时,是否需要将devise添加到capability.rb中?

问题描述

问题:当使用 cancancan 进行授权和设计进行身份验证时,我是否必须为应用程序的设计部分定义任何授权,还是设计自己处理所有事情?

例子

例如,对于(所有)其他资源,我们应该放置load_and_authorize_resource在该资源的控制器中,以便阻止不应访问它的用户这样做。然后,为了允许访问那些应该有权访问的人,我们可以通过添加如下代码来定义能力ability.rb

# ability.rb

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

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

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

标签: ruby-on-railsrubydeviseruby-on-rails-6cancancan

解决方案


区分帐户信息的设计授权部分(会话创建/注销/电子邮件+密码+恢复/更改,如果您启用了该功能)和与之相关的任何其他自定义逻辑和数据(例如 - 姓名、鞋码等),这一点很重要) 保存在内部或访问相同的模型。

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

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


推荐阅读