問題タブ [pundit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails-4 - 専門家スコープの使用方法
CanCan から Pundit に切り替えました。いくつかの点と、Pundit をどのように使用するのが最適かについてはよくわかりません。
例えば:
複数の親オブジェクトを持つことができるリソースがある場合、たとえば、目標が学生とインストラクターに属しているとします。したがって、学生は多くの目標を持つことができ、インストラクターは多くの目標を持つことができます。コントローラーのインデックス アクションでは、次のようにします。
params
ポリシー内では使用できないため、ここでロジックを実行する必要があります。おもう。私が知る限り、をスキップするpolicy_scope
と、目標のインデックス ページを表示するときに不正なエラーが発生します。
あなたは:
また
ミックスにたくさんのインクルードを投げるとどうなりますか?
または、注文が必要な場合...これは正しいですか?
スコープを使用する場合::scope
ここには何がありますか? :scope
モデルのインスタンスは評価されていますか? を介してその属性にアクセスしようとしまし:scope
たが、うまくいきませんでした。
ruby-on-rails - user.admin はどこにありますか? rails-devise-pundit スターターアプリで定義されていますか?
RailsApps rails-composerを使用して、rails-devise-pundit スターター アプリケーションを作成しました。私はまだRuby on Railsに少し慣れておらず、考案、専門家、およびRails 4に慣れていません。
コードを見て、それがどのように機能するかを学びました。コントローラとポリシー クラスには、user.admin? と呼ばれます。しかし、私は管理者を見つけることができませんか?方法。User モデルにあると思いますが、ありません。ユーザークラスは次のとおりです。
users_controller.rb の一部で使用:
専門家または考案者は、このメソッドを何らかの方法で作成しますか? 専門家のドキュメントで使用されているのを見てきましたが、例として使用しているだけです。メソッドを作成する必要がある、またはメソッドがそれを処理する必要があるとは言いません。可能な値として :admin を持つロール列挙型を何らかの形で使用していますか? 誰かがこれがどのように機能するかを説明できるなら、私はそれを感謝します.
ユーザークラスのロール列挙の代わりにロールを処理するために、すぐに rolify gem の使用を追加する予定です。何故か全く違うロール名を作りたくなるのかもしれません。すべてを機能させ続ける方法を理解していることを確認したいと思います。ありがとう。
ruby-on-rails - Pundit Policy ミニテスト テスト ケースが rake テストで実行されないのはなぜですか?
Rails 4.1 と Pundit gem を使用しています。UserPolicy クラスの UserPolicyTest クラスを作成しました。しかし、rake テストを実行すると、クラス内のテストはどれも実行されません。また、ミニテストを使用しようとしています。親クラスがどうあるべきかについてのドキュメントが見つかりません。MiniTest::Unit:TestCase の拡張も試みましたが、うまくいきませんでした。以下は、test/policies フォルダーにあるテスト クラスです。名前は user_policy_test.rb です。スペースを節約するために、ファイル内のいくつかのテストを削除しました。
ruby-on-rails-4 - Pundit gemを使用したミニテストで列挙値が間違っているのはなぜですか?
rails-devise-punditサンプル アプリを使用して、RailsApps からスターター アプリを作成しました。いくつかの機能を変更する予定があり、まだ機能することを確認したいので、ユーザーコントローラーテストを作成しようとしています。専門家の UserPolicy は、User クラスのロール列挙に基づく正しい値を返しません。UserPolicy.index? 以下に示すメソッドは、UsersControllerTest の最初のテストから呼び出されたときに false を返しています。申し訳ありませんが、ここには多くのコードと詳細があります。誰もがそれに従うことを願っています。
UsersControllersTest の失敗したテストを次に示します。応答は、:success ではなく :redirect です。
これは、私の問題があるインデックスメソッドを示しているだけのユーザーコントローラークラスです。メソッドauthorize @users
を呼び出す必要があります。UserPolicy.index?
私の専門家のユーザー ポリシー クラス。true を返すようにメソッドを変更するindex?
と、UsersControllerTest の応答は :success になります。したがって、何らかの理由@user.admin?
で正しい値が返されません。
さらに奇妙なのは、UserPolicyTest クラスを作成し、index?
そこからの呼び出しをテストすると、正しい応答が得られることです。このテストは正しく動作します:
ここに私のユーザーモデルがあります:
管理者ユーザー向けの私のテストフィクスチャは次のとおりです。
フィクスチャで役割を設定しても機能しないことがわかりました。after_initialize :set_default_role, :if => :new_record?
User モデルの行が原因だと思います。他の理由や、これを処理するためのより良い方法があれば、お知らせください。
更新: 強力なパラメータが原因である可能性があります。pry を使用してコードをデバッグしようとしたところ、UsersControllerTest で、サインイン後に管理者ユーザーのロールが 2 であることがわかりました。これは正しいです。しかし、User.Policy.index? に到達したとき、ロールは 0 でした。ロール フィールドをデバイスの強力なパラメータに追加する必要があるかもしれません。しばらく前に、その方法について何かを見ました。簡単には見えませんでした。私がそれにたどり着く前に誰かが答えを知っているなら、私に知らせてください。
ruby-on-rails - Rails - Pundit を使用した役割ベースのビュー
Devise と Pundit を使用してユーザーを作成し、ロールを割り当てるアプリの作成に取り組んでいます。
そこで、アプリに役割ベースのビューを持たせたいと考えています。それを可能にする方法を考えるのに苦労しています。
ログインすると、ホーム ビューuser
にリダイレクトする必要があります。user
の場合は、ホーム ビューmanager
にリダイレクトする必要があります。manager
高レベルで、そのロジックを記述するための最良の方法は何ですか? コントローラー、ビューに存在する必要がある場合は、おそらくパーシャルを使用して物事をDRYに保ちます....
どんなヒントでも大歓迎です。
ruby-on-rails - gem pundit を使用すると、Ruby on Rails 4.0.2 で投稿の作成者が投稿を編集または削除できないのはなぜですか?
私はruby
1.9.3とrails
4.0.2とpundit
0.2.1を使ったレールの初心者です
投稿モデルは次のもので構成されます。
devise
ユーザーモデルはgemを使用して生成されます(および持っていませんhas_many :posts
)
私はやったrake db:drop db:create db:migrate
し、schema.rb
今はuser_id
テーブルにposts
います。
次に、gem を使用するためにこのブログをフォローしましたpundit
そのブログに示されているのとまったく同じコードがあります。さらに、これをポストコントローラーアクションに追加しました:
エラーは発生していません(gemNoMethodError
を使用したときに発生したような)。cancan
しかし、どのユーザーも、投稿の作成者でさえも、自分の投稿を編集および破棄することはできません。
それは単に示しています Couldn't find post
。(これは からの警告メッセージですrescue_from
Pundit::NotAuthorizedError
)
ブログ投稿にあるメソッドのロジックを変更しようとしましPostPolicy
owned
たが、うまくいきませんでした。
これらのモデルとスキーマを使用して、宝石を使用せずにこの単純な承認 (投稿の作成者のみが投稿を編集および削除できる必要があります) を達成するにはどうすればよいでしょうか?
ここで他の同様の質問を試しましたが、うまくいきませんでした。
私の承認が機能しているため、views
具体的edit
にカスタマイズdestroy
して投稿のリンクに苦労していますindex.html.erb
投稿の作成者のみが、投稿の編集および削除リンクを表示する必要があります。
ポリシーメソッドを使用してビューをカスタマイズするために、elabs/punditに従いました。
これが私のコードですpost_policy.rb
そして、これは投稿のコードですindex.html.erb
elabs/pundit の専門家のドキュメントによると、との両方でメソッドをpolicy
介して のインスタンスを取得できると書かれています。policy
view
controller
私にとってそれは与えNoMethodError in Posts#index
、undefined method user_id for <Class:0x22d64d8>
投稿に user_id フィールドがあります。そのuser_idを取得するためのポリシーで@postを渡す必要があると思います。他の方法を試しましたが、成功しませんでした。
ruby-on-rails - Rails Pundit Rspec テスト
Rspec を使用して Pundit ポリシー スコープをテストする際に問題が発生しています。基本的に、スコープで返される値がユーザーに厳密に制限されていることをテストしようとしています。したがって、ユーザーに対して返されたすべての問題を循環し、ID がユーザーと同じであることを確認します。
これは緑色ですが、スコープ呼び出しが問題オブジェクトを返すだけであるため、非市民の役割の場合は失敗します。各ロールには .where() のスコープがあるため、これは大したことではありませんが、何か間違ったことをしている可能性があるコードの匂いです。
アクションを実行する IssueController があります
これをrspecでテストするには、これを行う必要がありました
twitter-bootstrap - エラー: Pundit でジェネレーターを使用すると、初期化されていない定数 WillPaginate::ActionView (NameError) が発生します
私のアプリは CanCan を使用していましたが、Pundit に切り替えたいと考えています。Pundit を Gemfile に追加し、CanCan を削除bundle
して実行した後、ジェネレーター ( rails g pundit:install
) を実行しようとすると、次のエラーが発生しました。
これが私のapplication_controller.rbファイルです:
ブートストラップ リンク レンダラーは次のとおりです。
ruby-on-rails - Devise Registrations New View / Controller からユーザーの Pundit ロールを設定する
私は Pundit と Devise の両方をセットアップしており、Rails アプリで正しく動作しています。ただし、サインアップ時にユーザーに自分の役割を決定させる方法がわかりません。
この時点で:
- Devise の新しいビューに渡される URL パラメータがあります。
- form_for で、role という隠しフィールドを param の値に設定します。
これは機能します。
しかし、悪意のあるユーザーがこのパラメーターを「管理者」に変更して、管理者になっているのではないかと心配しています。
これをどのように処理すればよいですか?管理者を作成するときに問題が発生するため、モデルに制限を加えたくありません。そこにチェックを入れるには、デバイス登録コントローラーをオーバーライドする必要がありますか?