我在命名空间中有一个嵌套资源
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并创建新的数据集。
很明显,我忽略了什么......什么?
答案 0 :(得分:0)
您是否覆盖了ApplicationController中的current_ability
以将第二个参数提供给您的Ability构造函数?我不确定服务器版本如何获得控制台示例显示的相同信息。