問題タブ [cancancan]

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.

0 投票する
0 に答える
243 参照

ruby-on-rails - Rails で CanCanCan を使用したネストされたルーティングと承認

次のルーティングがあります。

能力:

コントローラ:

新しいトランザクションを作成しようとすると、エラーが発生します。

私は何を間違っていますか?どうすれば修正できますか?前もって感謝します。

0 投票する
1 に答える
199 参照

ruby-on-rails - CanCanCan: ユーザー プロファイルのみの管理を許可する

デバイスとcancancanを使用するユーザーモデルがあります。ここに私の能力があります:

access_profile エイリアスは次のとおりです。

私の users_controller では、load_and_authorize_resource を使用しています。たとえば、「users/4」と current_user.id = 3 を試すと、そこに到達できます。

ログに次のように表示されます。

ここで、最初のクエリは set_user メソッドから取得されます。2 番目のクエリは、承認のためにリソースを読み込んでいると思います。そして、ここでは current_user.id = 3 であり、2 番目のクエリでも 3 が表示されるため、認証されていると思います。しかし、2番目のクエリのidは4でなければならないと思います。

load_and_authorize メソッドが正しく機能するためにはどうすればよいですか。

0 投票する
0 に答える
128 参照

ruby-on-rails - Rails 4、Devise、Role Model、および CanCanCan - 能力の定義

Rails 4 を使用して Web アプリを作成しています。

CanCanCan を使用して、さまざまな役割の能力を定義しようとしています。

User モデルと Profile モデルがあります。各ユーザーは、多数のプロファイルを持つことができます。各プロファイルは、異なる役割を持つことができます。

Profile.rb で、自分の役割を (Role Model gem を使用して) 次のように定義しました。

私のability.rbでは、次のように最初の能力を定義しようとしています:

私の Projects テーブルには、:closed というブール属性があります。

Sweep と Disclosure のモデルもあります。関連付けは次のとおりです。

私の開示​​テーブルには、:allusers というブール属性があります。

Projects.closed が false かつ project.sweep.disclosure.allusers が true の場合、ゲストにプロジェクトの読み取りを許可したいと考えています。

上記のようにしようとすると、次のようなエラーが表示されます。

能力を定義しようとする前は、これはエラーを引き起こしませんでした。また、プロジェクトのインデックスで返されたプロジェクトのいくつかは、私の能力.rb で指定した基準を満たしていないプロジェクトです (たとえば、Disclosure.allusers が true に設定されていません)。

この能力を上記のように定義する際に、私が何を間違っていたかわかる人はいますか?

これは、同じタイトルの関連する質問で述べた問題とは異なります。

0 投票する
1 に答える
115 参照

ruby-on-rails - CanCanCan - 能力と構文の定義

Rails 4、Devise、Role Model、CanCanCan を使ってアプリを作っています。

私は自分の能力.rbで能力を定義しようとしています.

私は次のことを試みています:

ただし、上記の行で次のような構文エラーが発生します。

=> を :true に置き換えようとしましたが、その場合、次のような構文エラーが発生します。

また、属性の開始前にコロンを配置しようとしましたが、この場合、次のエラーが発生します。

これを試す方法はこれ以上思いつきません。

私がテストしようとしている関連する属性は、Disclosure.rb というモデルにあります。そのモデルは Sweep.rb というモデルに属しています。Sweep は Project.rb というモデルに属しています。

私は能力を定義する方法を理解できず、これらのエラーは私を疲れさせました. CanCanCan を使用して能力を定義する方法を知っている人はいますか? もしそうなら、このユーザーがこれらのプロジェクトを表示できるかどうかを決定する属性を定義する際に、私が間違っていたことを教えてください。

0 投票する
1 に答える
1127 参照

ruby-on-rails - Rails 4: has_many :through アソシエーションを使用した CanCanCan アビリティ

次のモデルの Rails アプリがあります。

与えられた に対して、にcalendarは結合モデルで定義されている があります。userroleadministration

Ownerカレンダーごとに、ユーザーは、Editorまたはの 3 つの役割のうちの 1 つだけを持つことができますViewer

これらのロールは現在、ディクショナリまたは定数に格納されておらず、さまざまな方法で文字列 ("Ower"、"Editor"、"Viewer") として管理にのみ割り当てられます。

モデルの認証UserはDeviseを通じて処理され、current_userメソッドは機能しています。

ログインしたユーザーのみがアプリ内リソースにアクセスできるようにするために、コントローラーとコントローラーにbefore_action :authenticate_user!メソッドを既に追加しています。calendarsadministrations

ここで、役割ベースの承認システムを実装する必要があるため、CanCanCangem をインストールしました。

これが私が達成したいことです:

  • すべての (ログインしている)userは、新しい を作成できますcalendar
  • auserが a の であるowner場合、自分の を含め、this に属するすべての およびをcalendar使用できます。managecalendaradministrationcalendaradministration
  • ユーザーがeditorの場合、このカレンダーを削除して、自分の を破棄calendarできます。readupdateadministration
  • auserviewera の場合、calendar彼はreadこれを行うことができcalendardestroy彼のadministration.

上記を実装するために、次のability.rbファイルを作成しました。

私は Rails についてあまり実験したことがなく、初めて使用するCanCanCanので、自分のコードにあまり自信がなく、改善のための検証またはアドバイスが必要です。

それで、このコードは機能し、必要なものを達成できるでしょうか?

更新:現在のコードでは、ユーザーとしてログインし、別のユーザーのカレンダーの calendars#show ページにアクセスすると、実際にカレンダーにアクセスできますが、アクセスしてはいけません。

したがって、明らかに、私のコードは機能していません。

私が間違っていることについて何か考えはありますか?

更新 2 :特定の に対して s がアクションを実行できるようにする:model代わりにを使用していたため、コードにエラーがあると考えました。Modelusermodel

ただし、コードはまだ機能していません。

ここで何が間違っている可能性がありますか?

更新 3 : ユーザーのロールが所有者に設定されているかどうかを確認するために使用するという事実によって問題が発生する可能性がありif user.role?(:owner)ますが、データベースではロールは実際には「所有者」(文字列として) として定義されていますか?

更新 4: いくつかの調査を続けたところ、2 つの間違いを犯したことに気付きました。

  1. およびコントローラーに追加load_and_authorize_resourceしていませんでした。calendarsadministrations

  2. メソッドで 1 つではなく、2 つの属性 2 つのパラメーター — <code>initialize(user, calendar) — を定義しましたinitialize

そのため、次のように両方のコントローラーと、ability.rb ファイルを更新しました。

に属していないカレンダーにアクセスしようとするとcurrent_user、次のエラーが表示されます。

どうすればこれを修正できますか?

0 投票する
1 に答える
413 参照

ruby-on-rails - Rails Devise Role Model & CanCanCan - 能力の定義

CanCanCan で能力を定義しようとしています。

開始するための構文がわかりません。

私は役割に Role Model を使用しており、役割は Profile.rb で定義されています。Profile.rb は User.rb に属します。

ユーザーが学生の役割を持っているかどうかを確認しようとしています。

私がしようとすると:

次のような構文エラーが表示されます。

私がしようとすると:

次のような構文エラーが表示されます。

また、中括弧を通常の括弧に置き換えて、それらを完全に削除しようとしました。

デバイス部分 (user_signed_in) を削除して、以下のコメントの提案を使用しようとすると、次のようにします。

そして、私はこのエラーを受け取ります:

私がしようとすると:

次のエラーが表示されます。

私がしようとすると:

次のエラーが表示されます。

profile.rb で次の役割が定義されています。

私がしようとすると:

エラーは発生しませんが、このアプローチの問題は、学生が多くのことを実行できることです (10 行のアクセス許可があるため、10 個の「can」ステートメントのそれぞれに個別に if ステートメントを追加する必要があります。次の 'elsif' ステートメントの前に、if ステートメントをすべての行に適用できる方法がない限り。

私のアビリティ.rbの最初の部分を以下に貼り付けます(ロールもアビリティも多いので、全部は貼り付けていません)。

私が試したとき(以下の提案):

次のエラーが表示されます。

誰かが私が間違っていることを見ることができますか?

0 投票する
1 に答える
1030 参照

ruby-on-rails - Rails 4 + CanCanCan: "未定義のメソッド `role?' ユーザー向け」

これは Rails 4 に関するフォローアップの質問です: CanCanCan 機能 with has_many :through アソシエーション。コンテキストがわずかに変更され、4 回の更新後、最初の質問のコードもかなり異なっていると思われるため、ここで問題を再度述べます。

Undefined method 'role?'などの他の質問も確認しました。Userの場合、しかしそれは私の問題を解決しませんでした。

では、次の 3 つのモデルを用意します。

与えられたcalendarに対して、 にuserは があり、これは結合モデル ( という名前の列)roleで定義されています。administrationrole

calendarに対して、userは次の 3 つroleの のうちの 1 つだけを持つことができます: 所有者、編集者、または閲覧者。

これらの役割は現在、辞書や定数には保存されず、administrationさまざまな方法で文字列 ("Ower"、"Editor"、"Viewer") としてのみ割り当てられます。

Userモデルの認証は を通じて処理されDevisecurrent_userメソッドは機能しています。

ログインした のみがuserアプリ内リソースにアクセスできるようにするために、およびコントローラーにbefore_action :authenticate_user!メソッドを既に追加しています。calendarsadministrations

ここで、役割ベースの承認システムを実装する必要があるため、CanCanCangem をインストールしました。

これが私が達成したいことです:

  • すべての (ログインしている)は、新しいuserを使用できます。createcalendar
  • auserが a の であるowner場合、自分の を含め、this に属するすべての およびをcalendar使用できます。managecalendaradministrationcalendaradministration
  • ausereditora の場合、 calendarhe はreadupdatethis calendar、およびdestroyhis administration.
  • auserviewera の場合、calendar彼はreadこれを行うことができcalendardestroy彼のadministration.

上記を実装するために、次のability.rbファイルを作成しました。

ログインして任意のカレンダー ページ (インデックス、表示、編集) にアクセスしようとすると、次のエラーが表示されます。

user問題は、 arole自体がなく、特定の に対してのみrole定義されているという事実に起因すると思いcalendarます。

NoMethodErrorこれは、 for がrole?onになる理由を説明していuserます。

したがって、問題は次のようになります。user role特定の をチェックする方法はcalendar?

物事を機能させる方法はありますか?