CanCanCan ::读取能力,但可以更新和创建

时间:2016-12-05 10:30:06

标签: ruby-on-rails ruby cancan cancancan

我在命名空间中有一个嵌套资源

namespace :myns do
  resources :dashboards do
    resources :advertisements
  end
end

我将check_authorization添加到应用程序控制器并配置了控制器

class Myns::DashboardsController < ApplicationController
  load_and_authorize_resource :myns_dashboard, class: Myns::Dashboard
end

class Myns::AdvertisementsController < ApplicationController
  load_and_authorize_resource :myns_dashboard, class: Myns::Dashboard
  load_and_authorize_resource :myns_advertisement, class: Myns::Advertisement, :through => :myns_dashboard

能力等级是:

class Ability
  include CanCan::Ability

  def initialize(user, dashboard_id)
    user ||= User.new # guest user (not logged in)

    can :show, Myns::Dashboard, id: dashboard_id
    can :read, Myns::Advertisement, :myns_dashboard => { :id => dashboard_id }
  end
end

当我在控制台中加载用户的能力并询问该用户是否可以使用ID 6更新广告时,它会说&#34; no&#34;

user = User.first
ability = Ability.new(user,  1)
advertisement = Myns::Advertisement.find 6
ability.can? :update, advertisement
=> false

但是当我打开浏览器时,以身份1的用户身份登录并直接浏览到http://localhost/myns/dashboards/1/advertisements/6/edit,该网站显示没有任何错误。我可以编辑字段并提交更改,并将它们保存在数据库中。

我也可以打开http://localhost/myns/dashboards/1/advertisements/new并创建新的数据集。

很明显,我忽略了什么......什么?

1 个答案:

答案 0 :(得分:0)

您是否覆盖了ApplicationController中的current_ability以将第二个参数提供给您的Ability构造函数?我不确定服务器版本如何获得控制台示例显示的相同信息。