У меня есть следующее:
questions_controller.rb
class QuestionsController < ApplicationController
load_and_authorize_resource #cancancan
def index
authorize! :view_all, @questions
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
...
elsif user.content_creator
can [:index, :read, :create, :update], Unit
can [:index, :read, :create, :update, :view_all], Question
routes.rb
resources :units do
resources :questions, only: [:index]
Log
Started GET "/units/1/questions" for ::1 at 2018-10-29 13:37:15 -0400
Processing by QuestionsController#index as HTML
Parameters: {"unit_id"=>"1"}
User Load (8.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 13]]
You are not authorized to access this page.
Redirected to http://localhost:3000/dashboard
Я подтвердил, что пользователь content_creator
. Я даже перезапустил сервер. Пользователь может обновить Unit
. Однако они не могут просматривать указатель вопросов в этом блоке. Почему бы и нет?
Если я поставлю can :manage, Question
в начале ability.rb
, то он все еще не авторизован. Если я использую can :manage, :all
, то это работает.
Канканкан ~> 1.10