だから私がやりたいのは、の役割に基づいてリダイレクトを行うことですcurrent_user
.
これは私が持っているものです:
path = case current_user.roles.where(:name => "vendor")
when :vendor
dashboard_path
when :guest
home_path
else
home_path
end
redirect_to path
私が使用cancan
していて、私が知っているユーザーの役割を把握する唯一の方法は、current_user.has_role? :admin
またはを実行することですcurrent_user.roles.where(:name => role_name)
。
これらの制約がある場合 (または、ユーザーの役割を把握する別の方法を教えてください)、この case ステートメントを機能させるにはどうすればよいでしょうか?
編集 1
ここにある 2 つだけでなく、複数の役割をチェックしていると仮定します。4 つまたは 5 つになる可能性があります。
編集 2
明確にするために、これが私の現在の設定です。
私はDevise、CanCan、Rolifyを使用しています。Rolify を使用すると、ユーザーは複数のロールを持つことができますが、私のアプリケーションにはそのユース ケースがありません。ユーザーには 1 つのロールしかありません。のいずれかになりますvendor, buyer, guest, superadmin
。
の場合、自分に属するvendor
のみが表示されます。dashboard_path
彼らは他のvendor storefront
誰かに属している他のものを見ることができません。また、他のベンダーの製品を見ることもできません。そのため、一度ログインすると、他のすべてのロールのようになるroot_path
べきではありdashboard_path
ません。home_path
root_path
彼らが の場合guest
、彼らは価格以外のすべてを見ることができます - 私はすでにこのロジックが機能しています。私はこれを次のように達成しました:
if user.has_role? :guest
can :read, [Product, Vendor, Banner]
cannot :view_prices, Product
end
それから私の見解では、私はちょうどこのようなことをしました:
<% if can? :view_prices, Product %>
<div class="price pull-right">
<%= number_to_currency(@product.price) %> ea
</div>
<% else %>
<span class="no-price pull-right"><%= link_to "Log In To See Price", login_path %></span>
<% end %>
root_path
つまり、基本的に...私の本当の目標は、ユーザーの役割に応じて変更しようとすることです。私は基本的にこの質問に対する答えを実装しようとしています。