问题标签 [cancancan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
197 浏览

ruby-on-rails - Rails gem: Cancan on production is not working

I'm using cancancan.. and it works fine on development env .. but once i got it on the production the site works like if there's no gem installed at all.. no authorization handled.

I can't figure out what is wrong

--------------------edited in the application controller there's

and in the ability file

0 投票
1 回答
218 浏览

ruby-on-rails - 将 Rails 应用程序部署到 Heroku 无法正常工作

我已经在 Nitrous.io 上使用 Active Admin 创建了一个 rails 应用程序,并且一切都在该开发环境中工作。我正在使用 Devise/CanCanCan 进行身份验证/授权

当我推送到 heroku 并尝试访问 Active Admin 时,我收到以下错误:

我的用户模型是这样的:

能力.rb

我究竟做错了什么?

我试过多次重启heroku服务器。

谢谢你们的帮助。

干杯!

0 投票
0 回答
278 浏览

ruby-on-rails - Devise + Cancan 在生产中导致重定向循环,但在开发中不会

我已经让 Devise 在我的 rails4 应用程序中工作了很长一段时间。现在我需要添加不同的角色决定使用 Cancan 来完成此任务。

在开发中一切都运行良好,但是当我将代码部署到生产环境时,我得到的只是无限重定向循环。如果我删除 cookie,我可以获得登录页面,但登录会在同一个循环中结束。

我的根重定向到控制器索引操作。

我基本上只有一个具有任何业务逻辑的控制器,并且我的根重定向到该控制器中的索引操作。

来自控制器的相关线路。

但我也试过这个:

此外,之前还附加了这两个(分别)

在 ApplicationController 我将所有这些都放在一起并分开

这两个我都试过了,除非声明。

我尝试按照相关的 wiki 进行操作,但似乎无法使其在生产中发挥作用。如果这有什么不同,我将在生产中使用 Nginx/Passenger 组合。

在写这篇文章时,我意识到我一直在使用 Cancan 1.6,但我还没有尝试过 Cancancan。接下来会试一试。

所有的帮助都会得到重视。

更新:我用 Cancancan 1.9.2(而不是 Cancan 1.6)尝试了这个,结果相似。在找到解决方案或替代授权宝石之前,我暂时禁用了它。

0 投票
1 回答
213 浏览

ruby-on-rails - Rails CanCan条件哈希访问被拒绝

我在设置如下所示的能力时遇到问题:

问题是

即使返回 false

按预期只返回该用户的项目。

我已经使用 ruby​​ 1.9.3-p547 在 rails 3.2.19 上尝试了 cancan 1.6.10 和 cancancan 1.9.2

这是cancancan还是我的代码的错误?我如何找出为什么 ability.can?(:read, my_project) 失败了?

也作为问题发布

0 投票
1 回答
953 浏览

ruby-on-rails - 使用 CanCan 的不同重定向

我使用 CanCan 来运行 SaaS 应用程序进行授权(实际上是维护更频繁的 CanCanCan gem),并且我希望能够区分不同的“类型”权限。

例如,如果一个普通用户访问/adminpanel,那应该以重定向/和错误闪烁结束。但如果普通用户访问/paid_feature,我想将他们重定向到/payments/paid_feature/new. 这是给我带来困难的第二个。

显然我可以告诉 CanCan 让所有用户访问paid_featurein ability.rb,然后在paid_feature 控制器中确认他们已经付款(并在必要时重定向)。但这似乎不干净。这是一个授权问题,所以我希望它出现在我的ability.rb. 有谁知道我该怎么做?

0 投票
2 回答
1965 浏览

ruby-on-rails - ActiveAdmin + CanCanCan 错误:受保护的方法“授权!” 要求

我在让 ActiveAdmin 与 CanCanCan 一起工作时遇到了一些麻烦。我在 Rails 4 应用程序中使用 CanCanCan 版本 1.9.2 和 ActiveAdmin 版本 1.0.0.pre。load_and_authorize_resource在我的应用程序的其余部分通过添加和添加到我的 ApplicationController设置我的能力类并启用授权检查后check_authorization,我收到错误

protected method 'authorize!' called for #<Activeadmin::<SomeControler>> (NoMethodError)

经过一番搜索,我遇到了这个GitHub 问题,看起来与我遇到的问题一模一样。但是,该解决方案对我根本不起作用。在 config/initializers/active_admin.rb 我有,除其他外: ... config.authorization_adapter = ActiveAdmin::CanCanAdapter ... 我还确保我在任何 ActiveAdmin 控制器中都没有引用,但是当我尝试从我的集成测试访问任何 ActiveAdmin 资源时controller.authorize_resource,我仍然得到错误。protected method authorize! ...

经过更多的尝试和错误以及更多的搜索,我发现load_and_authorize_resource不建议从 ApplicationController 调用,并且像我上面所做的那样将 ActiveAdmin 的 authorization_adapter 设置为 CanCanAdapter 应该会自动在 ActiveAdmin 中启用 CanCanCan 的授权检查,但check_authorization由于资源未被授权而失败ActiveAdmin 控制器何时load_and_authorize_resource从 ApplicationController 中删除。

那么,为我的 ActiveAdmin 控制器启用 CanCanCan 授权检查的正确方法是什么?我应该如何集成 CanCanCan 和 ActiveAdmin 以便非管理员用户无法访问任何 ActiveAdmin 资源?

我还将这个问题发布到 ActiveAdmin 邮件列表,但没有得到任何回复。任何帮助将不胜感激。

0 投票
1 回答
268 浏览

ruby-on-rails - Rails - ActionController::RoutingError (没有路线匹配 [GET] "/generic.png"):

我最近更新了我的 gemfile,并注意到服务器在我的开发环境中记录了以下内容 - ActionController::RoutingError (No route matches [GET] "/generic.png")

在生产(Heroku) - 我得到以下 -

有没有其他人遇到过这个?它不会破坏应用程序,但对我来说是个谜。

我正在使用设计和康康康。我已经对我的代码进行了搜索,我可以看到的唯一提到 generic.png 的地方是在日志中,这让我觉得它被埋在了宝石的某个地方。

0 投票
1 回答
308 浏览

ruby-on-rails - 将 CanCan 与枚举一起使用时会出现问题吗?和accessible_by()

我正在尝试使用 CanCan 来限制我网站上的评论可见性。在我的评论模型中定义了一个枚举:

这是我当前的ability.rb 文件的摘录:

起初我只是在使用:

但即使这在获取记录时有效:

对这样的对象检查权限时它不起作用:

因为那时@a_comment.access_right ==“每个人”(而不是2)

所以我上网查了一下,发现这个:CanCanCommunity issue 102。建议的解决方案对我不起作用,因为像这样直接使用“每个人”:

会给出不正确的结果。获取记录时它背后的 sql 查询如下所示:

在这种情况下,“每个人”似乎都被转换为整数 (0)。

然后我找到了一个解决方法,我当前的能力文件,这要归功于符号 (:everyone)。但是当使用罐头时,事情将不再起作用?:read, @a_comment (使用accessible_by时sql是正确的)

有谁知道如何纠正这个问题?

如何定义基于枚举的能力,这些能力既可以在获取记录时进行验证,也可以通过 can 进行验证?

谢谢!

编辑:它可能与此CanCanCommunity 问题 65有关,但我无法使其工作。

0 投票
2 回答
190 浏览

ruby-on-rails-4 - 如何将特定范围仅限于具有特定角色的用户?

所以我有一个Post模型。我的posts可以发布或未发布。我正在使用 Rolify、CanCanCan 和 Devise。

我想要发生的是我的:admin用户,应该能够查看Post#Show所有帖子的操作,但我:memberguest用户(即未登录)应该只能看到Post.published帖子。

我的ability.rb样子是这样的:

我试过这样做,对于:memberGuest,但它在我的页面上给了我一个无限的重定向循环Post#Index- 这是我的root_path

WherePost.published返回所有带有publication_status = "published".

这就是我在我的Post.rb

我如何实现这一目标?

0 投票
3 回答
143 浏览

ruby-on-rails - 如何让 && 的 if 语句正常工作?

我认为这是:

这将返回此错误:

我也试过这个:

虽然我没有收到上述错误,但它根本不起作用......即 non-signed-in-user可以访问该if块中的内容。