私は、Rails 4.2アプリケーションでCanCanCanを使ってユーザーの役割を変更するためのドロップダウンを持っています。文字列のUser :: ROLES配列には、ユーザーが持つ可能性のあるさまざまな役割があります。ドロップダウンにロールを表示するには、次のCanCanCanロールを管理できるロールのドロップダウンに表示
<%= f.select :role, options_for_select((User::ROLES), @user.role) %>
は、私が現在サインインCanCanCanに応じて、ユーザcan :manage
役割へのドロップダウンオプションを制限したいです。現在のユーザーに:manage
権限のないロールをドロップダウンに入力しないでください。どんな指導も高く評価されます。
編集:文字列リテラルと比較する場合
ショーン・フーバーの答えは完璧です。しかし、ユーザーモデルでこの配列を定義することが問題であることがわかりましたが、私は、ability.rb
で1レベル深く設定されているロールと比較する必要があります。 Userモデルのパーミッションがability.rb
に設定されている例を次に示します。
これは理にかなっていますが、User :: ROLES配列のリテラルと比較すると実際にはうまくいかないことがわかりました。
ロールアクセスを設定するコードはability.rb
のようになります。私は、指定された特定の役割に対してチェックする必要があります。
if user.role? :superadmin
can :manage, User, role: 'admin'
end
にはどうすれば:superadmin
トークン化された役割がUser::ROLES
に代わりリテラルのオーバー:manage
のアクセス権を持っていることを特定の役割と比較することができますか?
User.rbからのロールの定義:アクションは、あなたのコントローラで実行されているものは何でも
ROLES = %w[student teacher school district reseller admin superadmin god]
を? –
ユーザーが管理できる@TallPaulの役割は、 'app/models/ability.rb'クラスに保持されます。質問を例で更新しました。 – gnycl
あなたの編集が与えられたら、この質問に対する答えを見てみたいでしょう:http://stackoverflow.com/questions/9809203/get-a-string-that-represents-a-users-cancan-abilities –