实施基于角色的助手

时间:2010-04-06 07:15:32

标签: ruby-on-rails authorization helpers

所以我的问题是如何根据当前用户的角色实现手写助手。

在请求时更改行为会效率吗?例如Helper 以某种方式计算出用户的角色,并包含正确的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

这样有效吗?是 rails方式?我有一大堆功能就像这样,我不想把它们中的每一个都包含在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 :(得分:0)

我认为这根本不会起作用。在开发模式下,它可能会表现,但在生产中,代码不会随着每个请求从头开始加载。这意味着第一个请求将加载正确的模块,但在此之后,下一个请求可能会加载第二个模块,然后就会发生冲突。

关于如何避免使用switch语句或if语句,我没有一个好的答案,但是怀疑类继承系统是不是模块包含的方法。