如果用户未登录,current_user 将为 nil。你将不得不提防这种情况。这里也缺少一些东西。无论过滤器调用的方法返回什么,操作都会继续进行。除了在过滤器中调用渲染或重定向的方法。
这是一个工作过滤器,它可以执行您尝试执行的操作,假设您有一个名为 denied 的命名路由。
require_role "company" ** This is working fine
before_filter :company_required
def company_required
redirect_to denied_url unless logged_in? && current_user.company_id == Company.find(params[:id])
end
您可以通过在默认路由块之前将以下内容添加到 config/routes.rb 来添加路由。如果需要,您可以使用现有控制器或创建新控制器。这是我通常使用的:
map.denied '/denied', :controller => "home", :action => "denied"
正如其他人所说,您似乎正在使用 Restful 身份验证。您可能会发现查看文档有助于更好地了解登录过程。简短的版本是用户将向设置 current_user 的 session_controller 提交一个将他们标识为应用程序成员的表单。如果你运行了生成器,你应该访问上面提到的logged_in?方法。
session_controller 和 current_user 在您的应用程序中可能有所不同,因为您给了 Restful Authentication generator 不同的参数。