0

ルートファイルにこれがあります:

devise_for :users,  :controllers => { :registrations => "users/registrations",
:sessions => "users/sessions",
:omniauth_callbacks => "users/omniauth_callbacks" }
devise_scope :user do
  get 'sign_in', :to => 'users/sessions#new', :as => :new_user_session
  get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
end

そして今、私は追加しました:

resources :users

管理者ユーザーがすべてのユーザーを表示できるようにしたいからです。

CanCanにはこれがあります:

class Ability
  include CanCan::Ability

  def initialize(user)
    if user
      if user.admin?
        can :manage, :all
      end
      can [:read, :edit, :update], User, :id => user.id
    end
    can [:create], User
  end
end

これは十分に安全ですか?新しく作成されたルートへの呼び出しをブロックするために、UserController に before_filter も追加する必要がありますか? このようなもの?これに関する問題は、ユーザーが自分のプロファイルを変更できなくなったことです...

before_filter :check_rights

private
  def check_rights
    unless current_user.admin
      redirect_to root_path
    end
  end
4

1 に答える 1

0

解決策を見つけました。before_filter は完全に正しいです。

追加しました

resources :users

デバイス部分の前に、その部分の後ろに配置する必要があります。ユーザーは自分のプロファイルを変更できますが、たとえばインデックスに移動することはできません。

于 2013-09-03T08:21:43.387 に答える