2010-04-06 82 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 

这种方法效率高吗?是吗导轨方式?我有一大堆的行为像这个功能,我不希望他们包装的每一个在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 

谢谢您的时间和想法。

回答

0

我不相信这会很好地工作。在开发模式下,它可能会表现出来,但是在生产中,每次请求都不会从头开始加载代码。这意味着第一个请求会加载适当的模块,但在此之后,下一个请求可能会加载第二个模块,然后会发生冲突。

对于您如何避免switch语句或if语句,我没有一个很好的答案,但怀疑类继承系统将是取代模块包含的方式。