У меня есть вложенный ресурс в пространстве имен
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
Когда я загружаю возможность для пользователя в консоли и спрашиваю, может ли этот пользователь обновить рекламу с идентификатором 6, он говорит «нет».
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 и создайте новые наборы данных.
Очевидно, я что-то упустил... Что?
load_and_authorize_resource, class: Myns::Dashboard
- person Tall Paul   schedule 05.12.2016through
. - person Joe Atzberger   schedule 15.12.2016