【发布时间】:2014-02-03 15:49:19
【问题描述】:
在 Ruby Rails 项目中,我有一个字符串数组,与 Rails 路由协议使用的控制器/动作语法相匹配。这些是我的公共路由,不需要身份验证。我想将该列表与当前的controller#action 进行比较,以强制执行登录身份验证。
问题:我无法弄清楚 Rails 如何解析路由字符串并确定适当的controller#action。我需要复制此功能以进行比较,但 Rails 核心代码非常糟糕,而且我无法确定逻辑。
就伪代码而言,这是我的 YAML 语法中的白名单数组示例,来自配置文件...
public_routes: [
'public',
'auth/sessions#new',
'auth/sessions#create',
'admin#login'
]
然后在我的ApplicationController...
before_filter :check_authentication!
...
def check_authentication!
Settings.public_routes.each do |this_route|
# parse string this_route into a namespace::controller#action
return if [current route matches parsed route]
end
# enforce authentication procedures here
end
我已经有逻辑允许PublicController(public_routes 数组的第 1 行)上的所有操作。匹配其他三个是我被绊倒的地方。
附:登录强制在ApplicationController 内全局进行,以干燥我的控制器,并集中我的公开允许路由的白名单。我可以在每个控制器内完成,但这不是目标。
【问题讨论】:
标签: ruby-on-rails ruby rails-routing controllers