問題タブ [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.
ruby-on-rails - Rails で CanCanCan を使用したネストされたルーティングと承認
次のルーティングがあります。
能力:
コントローラ:
新しいトランザクションを作成しようとすると、エラーが発生します。
私は何を間違っていますか?どうすれば修正できますか?前もって感謝します。
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 メソッドが正しく機能するためにはどうすればよいですか。
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 に設定されていません)。
この能力を上記のように定義する際に、私が何を間違っていたかわかる人はいますか?
これは、同じタイトルの関連する質問で述べた問題とは異なります。
ruby-on-rails - CanCanCan - 能力と構文の定義
Rails 4、Devise、Role Model、CanCanCan を使ってアプリを作っています。
私は自分の能力.rbで能力を定義しようとしています.
私は次のことを試みています:
ただし、上記の行で次のような構文エラーが発生します。
=> を :true に置き換えようとしましたが、その場合、次のような構文エラーが発生します。
また、属性の開始前にコロンを配置しようとしましたが、この場合、次のエラーが発生します。
これを試す方法はこれ以上思いつきません。
私がテストしようとしている関連する属性は、Disclosure.rb というモデルにあります。そのモデルは Sweep.rb というモデルに属しています。Sweep は Project.rb というモデルに属しています。
私は能力を定義する方法を理解できず、これらのエラーは私を疲れさせました. CanCanCan を使用して能力を定義する方法を知っている人はいますか? もしそうなら、このユーザーがこれらのプロジェクトを表示できるかどうかを決定する属性を定義する際に、私が間違っていたことを教えてください。
ruby-on-rails - Rails 4: has_many :through アソシエーションを使用した CanCanCan アビリティ
次のモデルの Rails アプリがあります。
与えられた に対して、にcalendar
は結合モデルで定義されている があります。user
role
administration
Owner
カレンダーごとに、ユーザーは、Editor
またはの 3 つの役割のうちの 1 つだけを持つことができますViewer
。
これらのロールは現在、ディクショナリまたは定数に格納されておらず、さまざまな方法で文字列 ("Ower"、"Editor"、"Viewer") として管理にのみ割り当てられます。
モデルの認証User
はDeviseを通じて処理され、current_user
メソッドは機能しています。
ログインしたユーザーのみがアプリ内リソースにアクセスできるようにするために、コントローラーとコントローラーにbefore_action :authenticate_user!
メソッドを既に追加しています。calendars
administrations
ここで、役割ベースの承認システムを実装する必要があるため、CanCanCan
gem をインストールしました。
これが私が達成したいことです:
- すべての (ログインしている)
user
は、新しい を作成できますcalendar
。 - a
user
が a の であるowner
場合、自分の を含め、this に属するすべての およびをcalendar
使用できます。manage
calendar
administration
calendar
administration
- ユーザーが
editor
の場合、このカレンダーを削除して、自分の を破棄calendar
できます。read
update
administration
- a
user
がviewer
a の場合、calendar
彼はread
これを行うことができcalendar
、destroy
彼のadministration
.
上記を実装するために、次のability.rb
ファイルを作成しました。
私は Rails についてあまり実験したことがなく、初めて使用するCanCanCan
ので、自分のコードにあまり自信がなく、改善のための検証またはアドバイスが必要です。
それで、このコードは機能し、必要なものを達成できるでしょうか?
更新:現在のコードでは、ユーザーとしてログインし、別のユーザーのカレンダーの calendars#show ページにアクセスすると、実際にカレンダーにアクセスできますが、アクセスしてはいけません。
したがって、明らかに、私のコードは機能していません。
私が間違っていることについて何か考えはありますか?
更新 2 :特定の に対して s がアクションを実行できるようにする:model
代わりにを使用していたため、コードにエラーがあると考えました。Model
user
model
ただし、コードはまだ機能していません。
ここで何が間違っている可能性がありますか?
更新 3 : ユーザーのロールが所有者に設定されているかどうかを確認するために使用するという事実によって問題が発生する可能性がありif user.role?(:owner)
ますが、データベースではロールは実際には「所有者」(文字列として) として定義されていますか?
更新 4: いくつかの調査を続けたところ、2 つの間違いを犯したことに気付きました。
およびコントローラーに追加
load_and_authorize_resource
していませんでした。calendars
administrations
メソッドで 1 つではなく、2 つの属性 2 つのパラメーター — <code>initialize(user, calendar) — を定義しました
initialize
。
そのため、次のように両方のコントローラーと、ability.rb ファイルを更新しました。
に属していないカレンダーにアクセスしようとするとcurrent_user
、次のエラーが表示されます。
どうすればこれを修正できますか?
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の最初の部分を以下に貼り付けます(ロールもアビリティも多いので、全部は貼り付けていません)。
私が試したとき(以下の提案):
次のエラーが表示されます。
誰かが私が間違っていることを見ることができますか?
ruby-on-rails - Rails 4 + CanCanCan: "未定義のメソッド `role?' ユーザー向け」
これは Rails 4 に関するフォローアップの質問です: CanCanCan 機能 with has_many :through アソシエーション。コンテキストがわずかに変更され、4 回の更新後、最初の質問のコードもかなり異なっていると思われるため、ここで問題を再度述べます。
Undefined method 'role?'などの他の質問も確認しました。Userの場合、しかしそれは私の問題を解決しませんでした。
では、次の 3 つのモデルを用意します。
与えられたcalendar
に対して、 にuser
は があり、これは結合モデル ( という名前の列)role
で定義されています。administration
role
各calendar
に対して、user
は次の 3 つrole
の のうちの 1 つだけを持つことができます: 所有者、編集者、または閲覧者。
これらの役割は現在、辞書や定数には保存されず、administration
さまざまな方法で文字列 ("Ower"、"Editor"、"Viewer") としてのみ割り当てられます。
User
モデルの認証は を通じて処理されDevise
、current_user
メソッドは機能しています。
ログインした のみがuser
アプリ内リソースにアクセスできるようにするために、およびコントローラーにbefore_action :authenticate_user!
メソッドを既に追加しています。calendars
administrations
ここで、役割ベースの承認システムを実装する必要があるため、CanCanCan
gem をインストールしました。
これが私が達成したいことです:
- すべての (ログインしている)は、新しい
user
を使用できます。create
calendar
- a
user
が a の であるowner
場合、自分の を含め、this に属するすべての およびをcalendar
使用できます。manage
calendar
administration
calendar
administration
- a
user
がeditor
a の場合、calendar
he はread
、update
thiscalendar
、およびdestroy
hisadministration
. - a
user
がviewer
a の場合、calendar
彼はread
これを行うことができcalendar
、destroy
彼のadministration
.
上記を実装するために、次のability.rb
ファイルを作成しました。
ログインして任意のカレンダー ページ (インデックス、表示、編集) にアクセスしようとすると、次のエラーが表示されます。
user
問題は、 arole
自体がなく、特定の に対してのみrole
定義されているという事実に起因すると思いcalendar
ます。
NoMethodError
これは、 for がrole?
onになる理由を説明していuser
ます。
したがって、問題は次のようになります。user
role
特定の をチェックする方法はcalendar
?
物事を機能させる方法はありますか?