Реализация ролевых помощников - PullRequest
0 голосов
/ 06 апреля 2010

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

Было бы эффективным изменить поведение во время запроса? например Помощник каким-то образом выясняет роль пользователя и включает соответствующий 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

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

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

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

1 Ответ

0 голосов
/ 07 апреля 2010

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

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

...