ruby-on-rails - 用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
?或者设计是否会在开发人员无需做任何事情的情况下处理所有这些?
我们显然不想让一个用户更改另一个用户的帐户信息!
解决方案
区分帐户信息的设计授权部分(会话创建/注销/电子邮件+密码+恢复/更改,如果您启用了该功能)和与之相关的任何其他自定义逻辑和数据(例如 - 姓名、鞋码等),这一点很重要) 保存在内部或访问相同的模型。
设计控制器,如果您没有对它们进行太多更改 - 非常简单并且不需要额外的访问控制,因为根据设计用户只能编辑自己的身份验证数据(他们根本不处理来自外部的用户 ID,因此无法篡改它)。此外,仅添加load_and_authorize_resource
至少不会产生任何影响,或者更有可能会干扰现有的设计代码,因为它不是围绕 cancancan 设计的。
但是,如果您有自己的用户配置文件控制器,例如用户索引、管理员编辑其他配置文件等 - 显然,您必须在那里促进访问控制。
推荐阅读
- xslt - eXist-db / XSLT / Saxon collection() 像糖蜜一样慢(或内存限制出错)
- azure-devops - VSTS 和 Azure Devops 有什么区别?
- nginx - 根据上游是本地还是远程设置 nginx proxy_pass 方案
- c# - 使用多个连接从 c# 并行执行相同的存储过程,但没有给出良好的响应时间
- c# - 将 nlog 与独立类项目中的扩展一起使用,不起作用(无法加载扩展程序集)
- r - 通过按钮/单击过滤数据表(R Flexdashboard)
- hive - Informatica BDM 字符串数据类型
- database - 使用 mlab,与 Meteor,并部署到 Galaxy:接收错误“未授权”DB“执行命令”
- postgresql - 即使 postgresql 数据库中存在列,在休眠中获取 PK 列的列未找到错误
- html - 从任何地方获取标题下方的段落