2

尽管我在 application_controller.rb 中设置了这个变量,但我确实有这个著名的错误:“未定义的方法 `current_user'” 声明授权:

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 ”的表而不是“用户”。在设计中激活了:“rails generate devise admin_utilisateur”

设计工作得很好

有关信息,我使用“roles_model”gem 自定义了我的用户表(admin_utilisateurs),因此我确实有一个属性roles_mask,它允许我管理不同的角色,同时提供一个用于声明性授权的role_symbols 方法。

现在的问题是我得到了这个奇怪的错误,尽管 Authorization.current_user 是由 application_controller.rb 设置的。

这是我的一个资源控制器产生错误的开始:

class PubResponsablesController < ApplicationController

  before_filter :authenticate_admin_utilisateur!
  filter_resource_access

  ...
end

我通过谷歌搜索此错误,但没有一个结果提供有效的解决方案。有人可以帮我吗?

非常感谢

4

2 回答 2

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:

用于身份验证的gem设计用户模型名称是“admin_utilisateur”而不是“用户”,但它可能是:帐户、成员、组或您需要的。

gem role_model为我的用户模型提供一个出色的角色方法“role_symbols” *该方法 role_symbols 返回一个“Set”子类而不是“Array”,但在 Github 上快速发布后,开发人员 (martinrehfeld) 在闪电分分钟。伟大的 !*

gem declarative_authorization提供基于角色的访问管理。以下帖子确认我使用与“用户”不同的模型名称的意愿。

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 提供。

我希望这将有助于其他开发人员,因为我花了两天时间来理清所有这些结构如何协同工作。设计让我更了解路由问题。

我给 RoRrrr 的几分钱 ;-)

于 2012-10-29T21:07:56.123 回答
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。(我的模型也可以称为acount、member 或其他...

我将 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”。

于 2012-10-29T14:01:12.943 回答