Ich benutze CanCanCan, Devise & Rolify.CanCanCan wirft einen regulären Rails-Fehler auf eine Ausnahme statt einer Flash-Nachricht wie ich
Mein ApplicationController
sieht wie folgt aus:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_filter :new_post
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_url, :alert => exception.message
end
def new_post
@post = Post.new
end
end
Mein routes.rb
sieht wie folgt aus:
authenticate :user, lambda { |u| u.has_role? :admin or :editor } do
get 'newsroom', to: 'newsroom#index', as: "newsroom"
get 'newsroom/published', to: 'newsroom#published'
get 'newsroom/unpublished', to: 'newsroom#unpublished'
end
# truncated for brevity
root to: "posts#index"
Das ist mein ability.rb
, die relevant ist:
elsif user.has_role? :member
can :read, :all
cannot :read, :newsroom
Also, wenn ich angemeldet bin in als :member
, und ich versuche, zu gehen /newsroom
, bekomme ich diesen Fehler:
NameError at /newsroom
uninitialized constant Newsroom
Anstatt auf die root_url
mit einem :alert
umgeleitet werden, wie ich erwartet hätte.
Nicht sicher, was hier passiert.
Edit 1
Für das, was es wert ist, ich dies nur, wenn ich das meinem NewsroomController
hinzufügen:
authorize_resource
Gibt es einen Fehler provozieren, wenn Sie/Nachrichtenredaktion als Admin loggued Zugriff – Typpex
@Typpex ja, es d oes provozieren einen Fehler, wenn ich auf "/ Newsroom" als Admin angemeldet bin. – marcamillion