Rails Rolify как да тествате за множество роли

Бих искал да тествам за множество роли с помощта на rolify.

Опитах това и не се получи:

<% if current_user.has_role? [:technician, :admin] %>

Благодаря за помощта!

АКТУАЛИЗАЦИЯ1

Опитвам се да тествам за :technician или :admin - това работи, но изглежда, че трябва да има по-кратък начин:

if current_user.has_role? :technician or current_user.has_role? :admin

person Reddirt    schedule 19.04.2013    source източник


Отговори (2)


Вижте документите на Rolify:

Проверка на множество роли Проверете дали потребителят има ВСИЧКИ определени роли

  user = User.find(1)
  user.add_role :admin # sets a global role
  user.add_role :moderator, Forum.first # sets a role scoped to a resource instance
  user.add_role :visitor, Forum # sets a role scoped to a resource class
  user.has_all_roles? :admin, { :name => :moderator, :resource => Forum.first }, { :name => :visitor, :resource => Forum }
  => true
  user.has_all_roles? :admin, { :name => :moderator, :resource => Forum.last }
  => false
  user.has_all_roles? :god, { :name => :visitor, :resource => Forum }
  => false

Проверете дали потребителят има НЯКОЯ от посочените роли(и)

  user = User.find(1)
  user.add_role :admin # sets a global role
  user.add_role :moderator, Forum.first # sets a role scoped to a resource
  user.add_role :visitor, Forum # set a role scoped to a resource class
  user.has_any_role? :admin, { :name => :moderator, :resource => Forum.first }, { :name => :visitor, :resource => Forum }
  => true
  user.has_any_role? :admin, { :name => :moderator, :resource => Forum.last }
  => true
  user.has_any_role? :god, { :name => :visitor, :resource => Forum }
  => true

Така че изглежда във вашата ситуация, която искате да използвате:

user.has_all_roles? :technician, {:name => :admin}
person Andrew    schedule 19.04.2013
comment
Опитвам се да тествам за :technician или :admin - това работи, но изглежда, че трябва да има по-кратък начин: if current_user.has_role? :technician или current_user.has_role? :админ - person Reddirt; 19.04.2013
comment
Опитахте ли това? Едно просто изявление or е напълно опция: do_something if user.has_role?(:foo) || user.has_role?(:bar) - person Andrew; 20.04.2013
comment
Този отговор не работи за мен. Беше в 3.x, сега в 5.x ... не работеше и в двете.. просто получавах false всеки път. - person Abram; 21.12.2017

Бих ви препоръчал да тествате нещо като current_user.has_any_role? :technician, :admin, то трябва да ви върне булевата стойност, която очаквате :)

person Miguelgraz    schedule 07.05.2014