- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的 Restaurant
模型运行一个强大的参数测试,但我遇到了一个错误,该错误阻碍了开发的进展。在它的 Controller 中,我有 CanCan 方法 load_and_authorize_resource
只允许管理员创建、更新和销毁这些模型实例:
class RestaurantsController < ApplicationController
load_and_authorize_resource param_method: :restaurant_params, find_by: :slug
...
end
在运行测试时出现错误:
1) RestaurantsController should permit POST #create to receive parameters :name
Failure/Error: should permit(:name).
CanCan::AccessDenied:
You are not authorized to access this page.
有没有简单的方法绕过这个授权?我在整个 SO 中都看过了,似乎没有一个明确的答案。
测试
describe RestaurantsController do
let(:user) { FactoryGirl.create(:user, admin: true) }
it { should permit(:name).for(:create) }
end
注意:我已经查看了 docs在 CanCan 上,他们说要创建一个用户实例,其 admin 属性设置为 true。尽管如此,我仍然对如何在我的测试中插入该用户感到困惑。
最佳答案
经过一些研究,我得出结论,绕过此问题的最佳方法与通过 Devise 登录 我的 User
工厂有关。不仅仅是处理 CanCanCan gem 本身。
根据您的设置,这可能会有所不同,但对于我的用户工厂,我将我的 admin
属性设置为 true
。
用户.rb
FactoryGirl.define do
factory :user do
first_name "John"
last_name "Doe"
email "john@example.com"
password "password"
admin true
end
end
然后我在我的 spec
文件夹中创建了一个名为 support
的子目录,并按照提供的 Devise 链接中的示例创建用于登录用户的适当模块方法:
spec/support/controller_macros.rb
module ControllerMacros
def login_admin
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in FactoryGirl.create(:user)
end
end
end
然后在我的 rails_helper
文件中,我简单地扩展了这个模块,以便我可以使用 login_admin
方法。 Devise 示例没有提到的是您需要要求
此助手中的controller_macros
文件。它可能会被某些人理解,但如果不小心可能会被忽视:
spec/rails_helper.rb
ENV['RAILS_ENV'] ||= 'test'
require 'spec_helper'
require File.expand_path('../../config/environment', __FILE__)
require 'rspec/rails'
require 'support/controller_macros'
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
....
config.include Devise::TestHelpers, type: :controller
config.extend ControllerMacros, type: :controller
end
最后,在您的 Controller 测试中,只需在需要的地方应用 login_admin
方法:
餐厅 Controller 测试
describe RestaurantsController do
login_admin
it { should permit(:name).for(:create) }
end
关于ruby-on-rails - 在运行 RSpec 测试时绕过 CanCan::AccessDenied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31762307/
我正在尝试使用 psutil 终止进程 (zoom.exe)。但是,我收到错误 psutil.AccessDenied。我拥有执行此操作的所有权限,并且已经在另一台电脑上进行了测试。 代码 def k
请帮助我解决这个问题。在我的NextJs应用程序中使用谷歌登录的http://localhost:3000/api/auth/error?error=AccessDenied。为什么?这是我的[...
我有一个使用 Spring Security 保护的方法,如下所示: @PreAuthorize("hasRole('add_user')") public void addUser(User use
当我遵循 Microsoft's article 时出现“AccessDenied”错误使用 AudioDeviceInputNode 类。这是我的代码: public sealed partial
An error occurred (AccessDenied) when calling the CreateStack operation: User: arn:aws:iam::81252085
我正在将可在.NET 3.5+中运行的.NET应用程序移植到WinRT,并且它包括一个WCF服务客户端(以编程方式使用ChannelFactory创建),该客户端几乎与所有共享其代码(即,我可以完全相
我遇到了一个主要问题:我无法访问不属于用户的(大多数)进程的信息。例如,以下内容: for proc in psutil.process_iter(): try: print
我已经为亚马逊支付实现了 PHP SDK,目前我面临一个错误,当我点击亚马逊支付按钮时,将打开一个弹出窗口询问亚马逊的登录凭据,成功登录后它将重定向到地址簿和付款方式选择页面,在该页面上我遇到了这个错
这个问题已经有答案了: HttpListener Access Denied (12 个回答) 已关闭 7 年前。 Win 7 和 VS2010 B2。我正在尝试使用内置 HttpListener 编
我一直在试图弄清楚为什么我的脚本中的这个步骤不起作用,据我所知,我的用户有权在我们的 AWS 账户上执行所有操作,所以我有点困惑。我想知道是否有一种方法可以让您从 botocore 或 boto3 本
我写了一个 serverless.yml部署一些 lambda,我在特定 API 中使用 GSI。 如果我使用 serverless-offline 在本地运行,它可以工作,但在部署 lambda 时
我在路由 AccessDenied 时遇到了一些问题,也可能是登录/注销路径。该项目是一个剥离的默认项目,没有更多的魔法。 Soo 存在一个 Account带有 AccessDenied() 的 Co
我尝试使用此 URI 生成访问 token https://login.microsoftonline.com//oauth2/v2.0/token 并且访问 token 已成功生成。 我正在传递 c
我将一个简单的 Web 应用程序部署到 S3通过 amplify publish .托管有Cloudfront已启用(我在设置托管时在放大中选择了 PROD 环境)并且我在 eu-central-1
Error: AccessDenied: You cannot perform the requested operation. 这是我尝试运行此代码时收到的错误消息... ... var sheet
我有一个 Angular 5 应用程序 - 我一直在本地运行,它在 Heroku 上与 nodjs 服务器一起运行很好,但是当我将它放在 Cloudfront 后面的 S3 存储桶中并点击刷新时,我得
我正在尝试创建一个文件,并在此之前将其删除(如果存在)。我的问题是,每当我成功进行删除操作并立即尝试创建相同的文件夹时,它都会因 AccessDenied 而失败。方法描述(对于 deleteIfEx
对于我的 SharePoint 设置,我有一个无法访问网站首页的特定用户组。如果他们直接访问它,他们会从 SharePoint 获得标准的“拒绝访问”页面。 我正在开发一个 HttpModule 拦截
我有几个用户提示无法使用 IE 10 浏览器访问我的网站,但他们可以使用 IE 9 和 Chrome。他们的问题是他们能够登录,但是当单击任何其他选项卡时,他们会收到 AccessDenied 错误,
我在使用 OpenTok 2 API 时遇到了一些问题.当我开始发布流时,系统提示我允许或拒绝该网站使用我的网络摄像头和麦克风,如果我允许,allowed() 应该运行,但如果我拒绝,则 denied
我是一名优秀的程序员,十分优秀!