我确实有这个着名的错误:“undefined method`current_user'”和声明式授权,尽管我在application_controller.rb中设置了这个变量:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_current_user
protected
def set_current_user
Authorization.current_user = current_admin_utilisateur
end
end
我正在使用名为“ admin_utilisateurs ”而非“用户”的表格。这是在Devise中激活的:“rails generate devise admin_utilisateur”
设计工作很棒。
有关信息,我使用“roles_model”gem定制了我的用户表(admin_utilisateurs),因此我确实有一个attribut roles_mask,允许我管理不同的角色,同时为声明性授权提供role_symbols方法。
现在的问题是,虽然Authorization.current_user是由application_controller.rb设置的,但我收到了这个奇怪的错误。
这是我的资源控制器产生错误的原因:
class PubResponsablesController < ApplicationController
before_filter :authenticate_admin_utilisateur!
filter_resource_access
...
end
我通过谷歌搜索此错误,但结果都没有提供可行的解决方案。 有人可以帮我吗?
非常感谢
答案 0 :(得分:2)
好的,这是最后的答案。
我修改了我的app / controller / application_controller.rb,因为我没有在视图中使用@current_user实例变量:
class ApplicationController < ActionController::Base
protect_from_forgery
# This is mandatory if you want to secure as well your app/models
before_filter :set_current_user
# This method is required by declarative_authorization on every controller
# that is using filter_resource_access (or any other declarative_auth.. mechanism)
def current_user
current_admin_utilisateur
end
protected
def set_current_user
Authorization.current_user = current_admin_utilisateur
end
end
正如我所说,我正在合作使用以下宝石:
gem devise 用于身份验证 用户模型名称是“admin_utilisateur”而不是“user”,但它可能是:帐户,成员,组或您需要的。
gem role_model 为我的用户模型提供一个明智的角色方法“role_symbols” *方法role_symbols返回一个“Set”子类而不是“Array”,但在Github上快速发布后,开发人员(martinrehfeld)在几分钟之内修复了这个兼容性问题。太棒了!*
gem declarative_authorization ,提供基于角色的访问管理。 我将使用与“用户”不同的型号名称来确认使用以下post。
declarative_authorization唯一需要的是每个控制器上的 current_user 方法。由于我正在使用与Devise不同的模型名称(例如admin_utilisateur,account,member,...),因此由devise创建的帮助程序具有不同的名称。而不是current_user,它是current_admin_utilisateur(或current_account,current_member)。所以我必须创建自己的current_user方法。
declarative_authorization所需的 role_symbols 方法由role_model gem提供。
我希望这会有助于其他开发者,因为我花了两天的时间来理清这些结构如何协同工作。 Devise在路由问题上给了我更多。
我的几分钱给RoRrrr; - )
答案 1 :(得分:0)
好的,我设法通过修改我的app / controller / application_controller.rb来解决这个错误:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_current_user
def current_user
@current_user = current_admin_utilisateur
end
protected
def set_current_user
Authorization.current_user = current_admin_utilisateur
end
end
我刚创建了自己的current_user方法,用于创建实例变量@current_user。这个是使用current_admin_utilisateur的值初始化的,该值基于Devise助手和我的自定义用户模型admin_utilisateur。 (我的模型也可以称为会员,会员或其他...... )
我将current_user方法放在application_controller中,以便它可以在我的应用程序的每个控制器中使用。
现在,我又收到了另一个错误:
User.role_symbols doesn't return an Array of Symbols (#<RoleModel::Roles: {:developer, :admin, :coordinator, :manager, :assistant, :distributor, :exporter, :historian}>)
我不明白,因为roles_model gem为admin_utilisateur模型提供别名方法'role_symbols'。