问题标签 [cancan]
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.
ruby-on-rails-3 - 在 Rails3 中测试 Cancan 授权时出现 SQLite3 错误:没有这样的表:abilities: DELETE FROM "abilities" WHERE 1=1
我在使用 Cancan ( http://github.com/ryanb/cancan ) 在 Rails3 beta4 中运行默认测试时遇到问题。测试是普通的自动生成的,看起来像
测试“真相”确实断言真正的结局
每个测试(单元和功能)都会产生以下错误:
ActiveRecord::StatementInvalid: SQLite3::SQLException: 没有这样的表:能力:从“能力”中删除,其中 1=1
即使在 test_helpers.rb 中定义了使用和能力,也会发生这种情况
我认为这是由于 Cancan 用于授权的能力模型,因为它没有持久化(只是一个普通的 Ruby 类),因此在数据库中没有表。也许有些东西在测试后试图拆除能力并错误地试图从数据库中删除能力?我该如何检查(更重要的是,修复)?
再一次,测试中没有自定义逻辑:它们是由 Rails3 beta4 生成的。
(仅供参考,Ability 类不继承自 ActiveRecord::Base 并包括 CanCan::Ability。此外,应用程序——授权和所有——工作正常。)
环境: - ruby 1.8.7-p249 - rails 3.0.0.beta4 - cancan 1.2.0 - 设计 1.1.rc2
还有其他人遇到这个问题吗?
谢谢你的帮助 !
更新:尝试切换到 PostgreSQL。显然,错误与数据库无关:运行“rake test”时出现以下错误
ActiveRecord::StatementInvalid: PGError: 错误: 关系“能力”不存在第 1 行:从“能力”中删除 ^:从“能力”中删除
ruby-on-rails - Rails - 基于缓存和权限的视图
我使用 CanCan 检查用户权限并有条件地为我的用户显示或禁止页面内容。我想缓存我的页面,即使使用片段缓存也找不到优雅的解决方案......例如:
当然,我并不孤单,有一个好方法可以做到这一点。通常认为这里的最佳做法是什么?
非常感谢您的意见。
ruby-on-rails - Collection_Select 默认值未设置
我在我的 rails 应用程序的编辑配置文件视图中使用的 collection_select 有一个奇怪的问题。数据库正在使用正确的值更新,但是当用户去编辑他们的个人资料时,没有为选择框选择默认值。我也无法让 :include_blank => true 或 :prompt => true 工作。
这是代码
编辑视图:
_player_form 部分:
生成的 HTML:
因为我使用 cancan 进行授权,所以我的控制器中有一个空的编辑操作,因为 cancan 会自动初始化
我尝试将该行添加到编辑中,它不会影响任何内容。此外,这个问题非常奇怪的是,编辑表单部分中的所有其他字段都填充了来自数据库的正确当前值。此外,Users 表确实有 course_id 列,它是 Courses 表的外键,我已经在控制台中检查了关联,它确实返回了正确的 course_id。关联设置正确,因为我有因此,我相信我的 collection_select 的语法有问题,但我不确定它是什么。
我很感激任何帮助。
谢谢。
ruby-on-rails - 在 CanCan 中使用块定义能力会引发异常
我正在使用 Ryan Bate 的 CanCan gem 来定义能力,但一些基本功能失败了。我有一个产品模型和产品控制器,其中我的索引操作如下所示:
当我尝试使用该accessible_by
方法检索产品时出现错误,我收到此错误:
我的能力课是这样的:
这似乎是一个非常简单的例子,所以我很惊讶它失败了,并想知道我是否忽略了一些简单的事情(即盯着我的代码太久)。
我做了更多的探索并运行了一个简单的测试。如果您查看下面的代码,一个示例工作正常,一个示例失败,它们实际上应该做同样的事情。
所以问题似乎在于 CanCan 处理这些块的方式。我更深入地研究了这个库,发现了错误出现的地方——在 CanCan 的能力类定义中:
所以我检查了这个only_block?
方法是什么。如果 can 定义有一个块但没有条件,则该方法返回 true,这对我来说没有意义,因为块的全部意义在于在块内定义条件对于以下语法来说太复杂时:
关于这个问题的任何见解都会很棒!我还在 CanCan github 页面上提交了一个问题,但我已经到了可能需要放弃该库的地步。但是,我知道很多人都成功地使用了 CanCan,这是我认为我一定做错了什么的基本功能。特别是因为 git 存储库在 3 天前更新,并且 Ryan Bates 在 README 中提到了 Rails 3 支持。
谢谢!
ruby-on-rails - 设计+不能阻止访问索引问题 wherer @proj = Proj.all
我有一个使用 Devise 和 CanCan 的应用程序。在 config>initializers>Abiliity.rb 类中的能力包括 CanCan::Ability
我对项目控制器的索引操作有问题,项目控制器是普通的 RESTful 控制器。基本上,作为普通用户的用户在登录时可以看到项目#index。但并非所有项目都将此用户作为“普通用户”,为什么 cancan 不阻止他的访问?
谢谢
ruby-on-rails - Rails 3, CanCan 根据用户的 InstanceID 限制整个应用程序的所有查询结果
我有两个表用户(姓名、电子邮件、密码、instance_id 等...)示例:james bond、james@abc.com、1 实例(id、域)示例:1、abc.com
在整个应用程序中,我想确保 James Bond 只看到分配给他的实例 = 1 的数据
因此,如果我有一个带有 (name, desc, instance_id) 的书表,他只会看到他的实例的书。
有人告诉我 CanCan 是解决这个问题的方法,但我不知道如何像上面那样在全局范围内设置一些东西,它似乎更像是基于角色的,比如管理员、版主等......我需要,但在级别低于上述数据规则。
想法?
ruby-on-rails - Rails:黄瓜忘记了 CanCan 授权
我正在尝试编写一些黄瓜测试以确保正确设置 cancan 权限,但我遇到了一个奇怪的问题:
当我通过以下代码登录时,水豚说我已经按预期登录了。但是,当我转到需要给定登录名的资源时,我收到 CanCan 的“未授权”消息。Capybara 在同一个“拒绝访问”页面上打印出“以 testsuperadmin 身份登录,角色为 superadmin”(所需角色)。
手动访问同一页面,而不是通过黄瓜/水豚,授权被授予并且一切正常。身份验证由设计处理。
我尝试在场景上方添加 @allow-rescue 并将 ActionController::Base.allow_rescue = true 添加到 features/support/env.rb - 两者都没有任何效果。
有什么建议么?这个真的把我难住了。
干杯...
ruby-on-rails - 基于用户<>项目的角色
目前我正在使用 Devise & CanCan,它允许我使用 (Roles_Users) 表创建具有角色的用户。
这很好,但我想要的是在我的应用程序中拥有项目,并且对于每个项目,用户可能拥有像(管理员、查看者等)IE 这样的角色,角色不是分配给用户,而是根据他们的项目分配给用户是其中的一员。
例子:
- 用户 X 属于具有管理员角色的项目 A
- 用户 X 属于具有访客角色的项目 B
- 用户 Y 属于具有观察者角色的项目 B
什么样的模型会为此工作?
楷模
用户 has_many: 项目 项目 ? 角色?
Users_Roles_Projects (user_id, project_id, role_id)
你怎么看?我是一个新手,可以利用你们这些有经验的人的理解和思考。谢谢!
ruby-on-rails - 带有 CanCan 问题的 Rails 授权
在我的 Rails 应用程序中,我实现了 AuthLogic 和 CanCan。但是,当试图确定用户是否可以使用 CanCan 管理文章(通过 article.user_id 检查他是否是所有者)时,我遇到了问题。这应该是直截了当的,我不知道我做错了什么。
用户 has_many 文章
转到 /articles/index 时出现以下错误
这是我的看法:
这是我的控制器:
ruby-on-rails - 这行 Ruby/Rails 有什么作用?
你能带我看看下面的 Ruby/Rails 行吗?
为了适合我的应用程序,我将其更新为:
那失败了,但后来我将其更新为:
它按预期工作。这是为什么?