2017-10-07 4 views
0

私のプロジェクトでは、Devise認証を扱うユーザークラスがあります。各ユーザーには1つの役割が関連付けられています。例として、マネージャーは役割#1です。Rails:cancancan gem conditionが動作しない

ロールはクラスであり、role_idに基づいてロールとユーザーの間に関連があります。したがって、マネージャーは1のrole_idを持ちます。

各ユーザーの権限を管理するためのcancancan gemがインストールされています。マネージャーのみがユーザーアカウントを作成できます。だから、私は能力クラスでこれを書いた:私は私のマネージャーでログインして、新しいユーザーのページにアクセスしようとすると、

def new 
    @user = User.new 
    authorize! :manage, @user 
end 

問題がある:私のユーザーのコントローラで

def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    if user.role_id == 1 
     can :manage, :user 
    else 
     cannot :manage, :user 
    end 
end 

、私はこれを持っています私はcancancanから、私がページにアクセスする許可を持っていないというメッセージを受け取ります。

私はそれが私の状態かどうかわからないか、私がアクセスしようとしているとき、あなたの助けのために...

感謝をuser.role_idたりします。

がcancancan宝石を参照してください:https://github.com/CanCanCommunity/cancancan

編集:私のIDEはそれがCURRENT_USERを見つけることができないと言われた場合

それは普通のことですか?ご覧のとおり

enter image description here

は、読み取り許可後@articleがあります:あなたはgithubの上でチェックすると enter image description here

はまた、cancancan使用する方法の例があります。だから私は、私はCURRENT_USERを置く必要があると思いません代わりに@user

最後に:

問題は正しくありませんでした:userました。それがモデルの場合は、 ":"を付けずにモデルの名前に最初に大文字を書く必要があります。したがって、:userの代わりに、それはUser

+0

問題は:ユーザーが正しくありませんでした。それがモデルの場合は、 ":"を付けずにモデルの名前に最初に大文字を書く必要があります。代わりに:user、それはUserでなければなりません –

答えて

0

がRailsセッションに依存している必要があります。これはあなたの#ユーザのコントローラ上の新しい動作であるため、あなたはアクティブなセッションを持っていないので、current_userはありません。

関連する問題