- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在让 ActiveAdmin 与 CanCanCan 一起工作时遇到了一些麻烦。我在 Rails 4 应用程序中使用 CanCanCan 版本 1.9.2 和 ActiveAdmin 版本 1.0.0.pre。在设置我的能力类并通过添加 load_and_authorize_resource
在我的应用程序的其余部分中启用授权检查之后和 check_authorization
到我的 ApplicationController,我得到了错误protected method 'authorize!' called for #<Activeadmin::<SomeControler>> (NoMethodError)
经过一番搜索,我遇到了this这个 GitHub 问题看起来与我遇到的问题一模一样。但是,该解决方案对我根本不起作用。在 config/initializers/active_admin.rb 我有,除其他外:
我还确保我没有引用
...
config.authorization_adapter = ActiveAdmin::CanCanAdapter
...controller.authorize_resource
在任何 ActiveAdmin Controller 中,但我仍然得到 protected method authorize! ...
当我尝试从我的集成测试访问任何 ActiveAdmin 资源时出错。
经过更多的尝试和错误以及更多的搜索,我发现调用 load_and_authorize_resource
不推荐从 ApplicationController 中设置 ActiveAdmin 的 authorization_adapter 为 CanCanAdapter,就像我在上面所做的那样,应该会在 ActiveAdmin 中自动启用 CanCanCan 的授权检查,但是 check_authorization
失败,因为在 load_and_authorize_resource
时资源未被授权给每个 ActiveAdmin Controller 从 ApplicationController 中删除。
那么,为我的 ActiveAdmin Controller 启用 CanCanCan 授权检查的正确方法是什么?我应该如何集成 CanCanCan 和 ActiveAdmin 以便非管理员用户无法访问任何 ActiveAdmin 资源?
我还发布了this向 ActiveAdmin 邮件列表提问,但没有收到任何回复。任何帮助将不胜感激。
最佳答案
在挖掘代码之后,我已经弄清楚发生了什么。 ActiveAdmin 及其 CanCanAdapter 尚不兼容 CanCanCan 的 check_authorization
方法。该方法依赖于 @_authorized
通过授权方法在 Controller 上设置实例变量,但 ActiveAdmin 的授权没有设置此变量。因此,即使 ActiveAdmin 正在执行授权,check_authorization
总是失败,因为 ActiveAdmin 没有设置这个实例变量。我已报告此问题,但目前的解决方法是添加 unless:
check_authorization
的子句匹配所有 ActiveAdmin Controller 。这停止 check_authorization
从为这些 Controller 运行,但是,只要启用 CanCanAdapter,ActiveAdmin 在响应资源之前仍会执行适当的授权。
这是我添加到我的 ApplicationController 的解决方法,直到问题得到解决,如果它曾经是:
class ApplicationController < ActionController::Base
...
check_authorization unless: :activeadmin_resource?
...
private
def activeadmin_resource?
self.class.ancestors.include? ActiveAdmin::BaseController
end
end
关于ruby-on-rails - ActiveAdmin + CanCanCan 错误与 : protected method `authorize!' called for <Every ActiveAdmin Controller>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26225673/
给定一个元素列表,如果每个元素都需要了解此列表中每个其他元素的状态,如何处理所有元素? 例如,在 Python 中实现它的直接方法可能是: S = [1,2,3,4] for e in S: fo
我在嵌套循环方面遇到问题。请看下面的 fiddle : http://jsfiddle.net/7znfmp9o/ 我希望每个部分都能获得视差效果,但是这里发生了一些奇怪的事情。 .each() 代码
好吧,伙计们,我正在尝试在另一个 for every row 循环中执行一个 for every row 循环,我对 mysql 真的很陌生,这是我的第一个触发器我有一个名为 Disponivel 的
我目前正在开发一个基于 Arc-Theme 的 GTK 主题。(你可以在这里看到我目前的进度:https://plus.google.com/u/0/100718986567621730640/pos
我将一个事件设置为某个月的 13 号,并每月重复一次。每个月都会正确地重复它。但是,当将其设置为某个月的 31 日时,它只会设置为 31 日的月份,并且如果它显示在“编辑”->“重复”->“每月重复”
我试图通过在 session 中存储数据来在每个 View 页面中显示记录的用户名。 但是我必须在每个函数中编写相同的两行..我正在获取用户数据,但是还有其他方法可以做到这一点吗?因为我认为重复相同
我需要每天从 8 点到 10 点到 10 点到 30 点每 10 分钟和 30 分钟运行一次任务: start at 8:10 -> 8:30 -> 9:10 -> .. -> 10:30 finis
我已经在文档中进行了一些搜索,并在网上花了一段时间,但找不到解决方案!我希望警报告诉我单击 .thumb 时它处于each() 的哪一次迭代。 EG:有六个.thumb,我点击数字3,浏览器弹出3!
谁能告诉我为什么循环在 5 条目之后没有停止? http://jsbin.com/ucuqot/edit#preview $(document).ready(function() { someA
我对实现 _.every() 有疑问。 我的代码在这里 _.every = function(collection, iterator) { if (collection.length =
我从面向对象编程开始我有以下问题:我开了一个新课然后我就从这门课开始现在,对于每个实例我想做一些事情我用 foreach 循环尝试过,但它不起作用......存在一些语法问题 这是类(class):
我尝试使用 jquery each() 函数在每次迭代后添加 0.5 增量。我必须在 li 上添加 animatoin-delay 属性,该属性的值应该增加 (0.5),以便我可以在文档加载时为它们设
首先看一下这段代码。示例我有 5 个具有必需类的输入字段。 var errMsg = "This is required!" $(function() { $(".required").each
因此,我正在尝试重新创建“every”方法,作为 Eloquent JavaScript 练习的一部分。我不明白为什么第二版不起作用(第一版有效)。 书上说“只有当谓词对数组的所有元素都返回真时,ev
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
有人可以告诉我为什么这会返回 true 吗?它应该返回 false,因为在第一次迭代中 value[pre] === 0... 谢谢。 function truthCheck(collection,
我正在尝试使用 Array 的 .every 来查看数组中的项目是否是连续的(1、2、3、4、5)。为什么当其中的所有内容都是 true 时返回 false? const nums = [1, 2,
var arr=[]; var k; for(var i=0;i native loop 2: 0ms 嗯,现在有点太快了。也许 arr 应该更大: var arr=[]; for(var i=0;i
这是一些 Javascript 数组方法的常见问题。以下面为例: var numbers = new Array(12, 5, 8, 130, 44); function isBigEnough(el
这个问题已经有答案了: Arrow function without curly braces (9 个回答) When should I use a return statement in ES6
我是一名优秀的程序员,十分优秀!