所以我有3种类型的用户:
admin
moderator
regular user
我将控制器和管理页面锁定在控制器范围的系统中,如下所示:
def authorize
unless User.find_by_id(session[:user_id]) and User.find_by_id(session[:user_id]).moderator == true
redirect_to login_url, :notice => "Please log in with a moderator account"
end
end
def authorize_admin
unless User.find_by_id(session[:user_id]) and User.find_by_id(session[:user_id]).admin == 1
redirect_to login_url, :notice => "Only admins can access the page you tried to access"
end
end
但我需要将常规用户访问多个控制器的编辑页面(当然还有更新操作)。但只需编辑和更新。
如果我这样做:
before_filter :authorize, :except => :edit
然后任何人(即使没有登录)都可以访问这些页面。
我该怎么做呢?
修改
根据Thilo的建议,我将以下内容添加到application_controller.erb文件中:
def update_successful
skip_before_filter :authorize
end
在普通用户编辑条目后能够提供update_successful页面。但是我收到了这个错误:
undefined method `skip_before_filter' for #<HomeController:0x007ff782aeb6f0>
答案 0 :(得分:1)
您可以明确跳过任何全局应用过滤器:
skip_before_filter :authorize, :only => [:edit, :update]
或者首先不要将其应用于相关行动:
before_filter :authorize, :except => [:edit, :update]
修改强>
要回答您的进一步问题:将其添加到您的应用程序控制器:
def upload_successful
end
这是一个空方法,它明确定义了Rails在呈现home/upload_successful.html.haml
模板时隐式使用的操作。然后,通过修改过滤器从该方法中删除身份验证:
before_filter :authorize, :except => [:upload_successful]
这是Rails中的一个很好的introduction to rendering - 它有助于理解默认情况下的渲染,这是upload_successful
模板在没有匹配的控制器或操作定义的情况下显示的内容。