2013-04-19 3 views
3

Я хотел бы протестировать несколько ролей с помощью команды rolify.Rails Rolify, как тестировать несколько ролей

Я попробовал это, и это не сработало:

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

Спасибо за помощь!

Update1

Я пытаюсь проверить: техник или: администратор - это работает, но кажется, что там должно быть более короткий путь:

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

ответ

3

Посмотрите на Rolify docs:

Проверка нескольких ролей Проверьте, имеет ли пользователь ВСЕ указанные роли

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 

Проверьте, имеет ли пользователь ANY указанной роли (ы)

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} 
+0

Я пытаюсь проверить: technician или: admin - это работает, но кажется, что должен быть более короткий путь: if current_user.has_role? : техник или current_user.has_role? : admin – Reddirt

+0

Вы попробовали? Простой оператор 'или' является полностью опцией:' do_something, если user.has_role? (: Foo) || user.has_role? (: bar) ' – Andrew

+0

Этот ответ не работает для меня. Был в 3.x сейчас в 5.x ... не работал ни в одном .. просто получайте ложь каждый раз. – Abram

5

Я рекомендую вам проверить что-то вроде current_user.has_any_role? :technician, :admin , он должен вернуть вам логическое значение, которое вы ожидаете :)

Смежные вопросы