我正在尝试使用rails-authorization-plugin和authlogic使permit
方法正常工作,并且我一直遇到此错误:
当我尝试:
class ApplicationController < ActionController::Base
...
before_filter permit 'admin'
...
我明白了:
Authorization::CannotObtainUserObject in HomeController#index
Couldn't find #current_user or @user, and nothing appropriate found in hash
现在我确实已经设置了current_user
方法,但它确实有效,因为我在应用中的其他地方使用了它:
class ApplicationController < ActionController::Base
...
helper_method :current_user
private
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
...
我也知道我的用户在我的数据库中拥有相应的角色,因为这种方法有效:
def require_admin
unless current_user.is_admin? || current_user.is_root?
flash[:warning] = 'You are not an administrator and cannot access this page.'
redirect_to root_path
end
end
如果我只是使用以下方法检查用户级别,我可以使一切正常:
before_filter :require_admin, :only => 'index'
...但我不应该与permit
和permit?
有效地做同样的事情吗?
非常感谢任何帮助。如果您需要查看更多代码,请告诉我,我很乐意发布。关于让这两个系统相互协作,我可以在谷歌上做任何事情。
答案 0 :(得分:2)
好的,我想我已经明白了。
正如Jared正确指出的那样,正确的用法是
permit 'admin'
(不是before_filter
的一部分)。
...无论其
...默认:get_user_method
设置为#current_user
,这是acts_as_authenticated
插件使用的内容。如前所述,我正在使用AuthLogic,我将方法定义为current_user
(没有井号)。
所以,我尝试了以下内容:
permit 'admin', :get_user_method => current_user
只有一个很好的错误消息才能说明我没有这样的变量或方法。然而,我缺少的是哈希选项采用字符串,而不是直接调用方法!! (愚蠢的错误,我知道!)
所以
permit 'admin', :get_user_method => 'current_user'
......似乎对我有用。
我喜欢Ruby和Rails,但有时它的简单性可能是它自己的诅咒;我总是被简单的东西所拥有。 :)
答案 1 :(得分:0)
您使用的插件不正确。它不应该放在过滤器之前。
在全球范围内,您只需声明:
permit 'admin'
就是这样。
您的所有操作都会查找current_user或@user对象,如果没有,则会重定向到登录页面。
在每个操作级别,您将其用作块:
def index
permit 'admin' do
@some_models = SomeModel.all
end
end