2010-04-06 4 views
0

Итак, мой вопрос: как реализовать свои рукописные помощники на основе роли текущего пользователя.Реализация помощников на основе ролей

Было бы эффективным изменить поведение во время запроса? например Помощник каким-то образом определяет роль пользователя и включает соответствующий SubModule?

module ApplicationHelper 
    module LoggedInHelper 
     # Some functions 
    end 

    module GuestHelper 
     # The Same functions 
    end 

    # If User is Guest then include GuestHelper 
    # If User is LoggedIn then include LoggedInHelper 

end 

Действительно ли этот способ? это рельсы способ? У меня есть целая куча функций, которые действуют как это, и я не хочу, чтобы обернуть каждый из них, если заявление

def menu_actions 
    if current_user.nil? 
     # User is guest 
     { "Log in" => link_to "Login", "/login" } 
    else 
     # User is Logged In 
     { "Log out" => link_to "Logout", "/logout" } 
    end 
end 

Спасибо за ваше время и мысли.

ответ

0

Я не верю, что это будет работать очень хорошо. В режиме dev он, вероятно, будет вести себя, но в процессе производства код не загружается с нуля с каждым запросом. Это означает, что первый запрос будет загружать соответствующий модуль, но после этого следующий запрос может загрузить второй модуль, а затем возникнет конфликт.

У меня нет хорошего ответа на вопрос о том, как избежать операторов switch или операторов if, но подозревайте, что система наследования класса будет способом перехода вместо включения модуля.