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

「users 」の代わりに「 admin_utilisateurs 」というテーブルを使用しています。これはDeviseで次のようにアクティブ化されました:「rails generate devise admin_utilisateur」

Deviseはうまく機能しています。

参考までに、ユーザー テーブル (admin_utilisateurs) を "roles_model" gem でカスタマイズしました。これにより、宣言型承認のための role_symbols メソッドを提供しながら、さまざまなロールを管理できるようにする属性 roles_mask ができました。

問題は、Authorization.current_user が application_controller.rb によって設定されているにもかかわらず、この奇妙なエラーが発生したことです。

これは、エラーを引き起こす私のリソースコントローラーの始まりです:

class PubResponsablesController < ApplicationController

  before_filter :authenticate_admin_utilisateur!
  filter_resource_access

  ...
end

このエラーを Google で検索しましたが、有効な解決策を提供する結果はありません。誰でもこれについて私を助けることができますか?

どうもありがとう

4

2 に答える 2

2

これが最終的な答えです。

ビューで@current_userインスタンス変数を使用しないため、app / controller/application_controller.rbを変更しました。

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デバイスuser-model-nameは「user」ではなく「admin_utilisateur」ですが、アカウント、メンバー、グループ、または必要なものである可能性があります

gem role_modelは、ユーザーモデルに素晴らしいロールメソッド「role_symbols」を提供します*メソッドrole_symbolsは、「Array」ではなく「Set」サブクラスを返していましたが、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_modelgemによって提供されます。

これが他の開発者の助けになることを願っています。私は2日間かけて、このすべてのファブリックがどのように連携するかを整理しました。Deviseは、ルーティングの問題で私をさらに連れて行ってくれました。

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メソッドを作成しました。これは、Deviseヘルパーとadmin_utilisateurと呼ばれるカスタマイズされたユーザーモデルに基づくcurrent_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」を提供しているため、わかりません。

于 2012-10-29T14:01:12.943 に答える