CanCanCan不会阻止用户访问索引页面

时间:2015-06-28 10:01:19

标签: ruby-on-rails cancancan

我想阻止未登录的用户使用CanCanCan

访问该网址
  

http://localhost:3000/users

我的能力模型是

class Ability
include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.admin?
      can :manage, :all
    elsif user.roles.size > 0
      can :manage, User, :id => user.id
    else
      can :read, :all
      cannot :read, :User
    end
  end
end

我的用户控制器是

class UsersController < ApplicationController
  load_and_authorize_resource

  def index
    @users = User.paginate(page: params[:page],:per_page => 5)
  end

  def new
    # @user = User.new
  end

  ...
end

当我以访客用户身份访问该页面时。我看到用户索引页面而不是被我的应用程序控制器中的此代码重定向到登录

rescue_from CanCan::AccessDenied do |exception|
  if user_signed_in?
    flash[:error] = "Access denied!"
    redirect_to root_url
  else
    flash[:error] = "Please Sign in"
    redirect_to new_user_session_path
  end
end

CanCanCan可以工作并停止访问控制器中的其他操作,而不是索引。

1 个答案:

答案 0 :(得分:0)

在我的用户控制器中我错过了

before_filter :authenticate_user!, :except => [:new, :create]

这允许访客用户访问该页面。