2

ログインしていないユーザーがCanCanCanでURLにアクセスできないようにしたい

http://localhost:3000/ユーザー

私の能力モデルは

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 は機能し、インデックス以外のコントローラー内の他のアクションへのアクセスを停止します。

4

1 に答える 1

0

私のユーザーコントローラーでは、行方不明でした

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

これにより、ゲスト ユーザーがページにアクセスできるようになりました。

于 2015-06-28T10:58:28.820 に答える