問題タブ [rolify]

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 に答える
406 参照

ruby-on-rails - Rails との「仮想関連付け」

「仮想関連付け」と呼んでいるものをレールのモデルに実装する方法についてのガイダンスを探しています。

この前に、実際の関連付けパス (HABTM) を使用することを検討したという免責事項を示しますが、これは私が既に実装した概念と競合することがわかります。

現在、を介してオブジェクトProjectに関連付けることができるモデルがあります。例として、a には多数の、およびが含まれる場合があります。Aは、同じまたは異なるものを表すこともできます(単一テーブルの継承を除外します)。UserrolesProjectsite_managersconstruction_managersproject_managerssite_managerproject_managerprojects

Rolify gem を使用すると、これを実装するのはかなり簡単です。上記の役割のいずれかを特定のプロジェクトとして特定のユーザーに割り当てることができますsample_user.add_role(:site_manager, sample_project).

私の目標の 1 つは、新しいプロジェクトをセットアップできるフォームを作成し、複数選択リストを使用してユーザーにロールを割り当てることができるようにすることです。例として、私のフォームには、選択したユーザーを新しいプロジェクトのサイト マネージャーとして割り当てるための次の入力があります。

= f.input :site_managers, collection: User.all, input_html: { multiple: true }(フォーマスティック DSL)

ここで、少し複雑になります。site_maanagersフォームから渡された user_ids のハッシュを取得し、必要に応じて適切なレコードを取得/更新できる属性のカスタム getter/setter を実装することができました。

ただし、この実装は、 withに 1 つuserを追加するなどのことができる実際の関連付けの実装とはほど遠いものです。site_managerssample_project.site_managers << sample_user

現時点では、ユーザー インスタンスを使用して site_managers の配列を設定することもできません。私のカスタム セッターuser_idsは、フォーム送信の実装の外部で使用する場合、少し面倒で直感的ではない引数としてのみ受け取ります。セッターメソッド内の型をチェックすることでこれを簡単に回避できますが、ハッカーのように感じられ、Rails とはあまり似ていません。

カスタムゲッター/セッター全体を捨てて、結合テーブルを使用してこれらすべてのレコードを管理するHABTM実装を使用しようとしましたが、プロジェクトにさらにロールを追加する必要がある場合、これがうまくスケーリングされないことが懸念されます(各ロールは結合テーブルに追加の列を追加します)。また、Rolify で既に提供されている機能/概念を複製しているように感じてしまうので、ある場所では結合テーブルのロールをチェックし、他の場所では Rolify を使用しています (つまり、ユーザーが管理者であるか、特定のリソース)。

私が見落としている可能性のあるものは他にありますか、それともこれを行う唯一の方法ですか?

ありがとうございます。皆様のご意見をお待ちしております。

ログ

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

ruby-on-rails - rolify with_role で ActiveRecord マージの動作がおかしくなる

次のようなモデルの例を考えます。

次のコードは期待どおりに機能します。

でも

Fooテーブルの値が入力されたレコードのコレクションを返しquxxesます。これは、たとえば列がオンであるrecords.zがオンではない場合、欠落属性エラーが発生することを意味します。これを次の方法でほぼ修正できます。zfoosquxxes

quxxesしかし、これは、からfoosではなく、同じ名前を持つ列から値を取得するためid、欺瞞created_atupdated_atですquxxes

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

ruby-on-rails - Ruby on Rails で Devise のさまざまなユーザー モデルと登録パスを設定する

私はルビーに非常に慣れていないので、何ヶ月もこれに苦労しています。私は広範囲に検索し、答えが言ったことを試しましたが、まだ運がありません. (Ruby On Rails で複数のユーザー モデルを試し、登録ルートを分けて、共通のログイン ルートを 1 つ持つように工夫しましたが、うまくいきませんでした)

私は現在 user.rb モデルを持っており、devise に接続されており、正常に動作しています。

1-サインアップページに、個別の登録フォームにつながる3つのボタンが必要です(ビジネス、マネージャー、および既存のユーザーにそれぞれ1つずつ)。これをroutes.rbで設定しますか? 2-フォームには、それぞれのデータベースに入力されるさまざまな属性があります。3-フォームの記入が完了すると、それぞれのルートに誘導されます。ユーザーは現在のデフォルト ルートに、ビジネスはビジネス ダッシュボードに、マネージャはマネージャ ダッシュボードに移動します。これはまたroutes.rbまたはdeviseにありますか?

ご指導いただければ幸いです。

私はdevise、cancan、およびrolifyのドキュメントを読みましたが、すべてをまとめて機能させることはできないようです。

私はルビーに非常に慣れていないので、何ヶ月もこれに苦労しています。私は広範囲に検索し、答えが言ったことを試しましたが、まだ運がありません. (Ruby On Rails で複数のユーザー モデルを試し、登録ルートを分けて、共通のログイン ルートを 1 つ持つように工夫しましたが、うまくいきませんでした)

私は現在 user.rb モデルを持っており、devise に接続されており、正常に動作しています。

1-サインアップページに、個別の登録フォームにつながる3つのボタンが必要です(ビジネス、マネージャー、および既存のユーザーにそれぞれ1つずつ)。これをroutes.rbで設定しますか? 2-フォームには、それぞれのデータベースに入力されるさまざまな属性があります。3-フォームの記入が完了すると、それぞれのルートに誘導されます。ユーザーは現在のデフォルト ルートに、ビジネスはビジネス ダッシュボードに、マネージャはマネージャ ダッシュボードに移動します。これはまたroutes.rbまたはdeviseにありますか?

ご指導いただければ幸いです。

私はdevise、cancan、およびrolifyのドキュメントを読みましたが、すべてをまとめて機能させることはできないようです。

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

ruby-on-rails - Rails権限の明らかな矛盾

gems オーソリティと roify を使用して、一連のサブジェクトに対するユーザー権限を管理しています。各サブジェクトは、ユーザーが:adminそのサブジェクトのロールを持っている場合にのみ表示できます。ビュー内のコード:

オーソライザーのコード:

私の問題は、ADMIN 部分は表示されますが、ページの残りの部分は表示されないことです。ただし、2 つの if 条件の真偽値は同じでなければなりません。誰でも間違いを見つけることができますか?

0 投票する
2 に答える
843 参照

ruby-on-rails-4 - CanCanCan は、指定したようなフラッシュ メッセージではなく、例外で通常の Rails エラーをスローします。

CanCanCan、Devise、Rolifyを使っています。

ApplicationControllerはこのように見えます:

routes.rbはこのように見えます:

これはability.rb関連する私のものです:

としてログインしているときに:memberにアクセスしようとすると/newsroom、次のエラーが表示されます。

にリダイレクトされるのではなく、私が期待root_urlしていたようなものです。:alert

ここで何が起こっているのかわかりません。

編集 1

価値があるのは、これを my に追加した場合にのみ取得できますNewsroomController:

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

ruby-on-rails - Ruby/Rails - 私のユーザーモデルの「イベント」メソッドはそんなに悪い考えですか?

私は、ユーザーが 1 つ以上のイベントに参加するアプリケーションを開発しているため、それらのイベント内でユーザーが占める役割に基づいてイベントを「持っている」と言えます。Rolify を使用して、ユーザーとイベントを関連付けています。Rolify は、ユーザーがそのイベント内で果たす役割に基づいて、ユーザーとイベントの間の関連付けを形成します。Rolify は、ユーザーの役割に関するデータを返すことに関心がありますが、ユーザーがその役割を持つイベントについては気にしないため、イベントに関するデータ (ID を除く) は返しません。

したがって、次のようなメソッドを書くことができます。

ユーザーに関連付けられているすべてのロールを取得します。

そのようなロールの 1 つが次のようになります。

言えるようになりたいのは

roleName に関連付けられたすべてのイベントを取得します。

明らかに、Rolify を介して利用できるものだけを考えると、これを行うことはできません。そのため、ユーザー モデルに役立つメソッドを作成しました。

私の懸念はそれです

  1. この方法は、何らかの形で単一責任の原則に違反しています。
  2. このメソッドでは、最終的にイベントを取得するために複数のデータベース呼び出しが必要です。1 つはロールに対して、もう 1 つはイベントに対してです。(私はこの種のことに不慣れなので、実際にどれほど悪いかはわかりません。)

Rolify ロールのセットアップを維持しながら、ユーザーのイベントを取得するためのより良い方法はありますか?

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

ruby-on-rails-4 - Rolify と Rails 4 のロール管理

Rails 4 アプリにロール ベースのアクセス システムを実装しようとしています。エンド ユーザー (super_admin) が UI を介してロールの割り当てを編集できるようにしたいと考えています。

私はある程度の成功を収めましたが、もっと良い方法が必要だと感じずにはいられません (私はレールに慣れていないため)。これが私のコードです:

そして私のフォーム(HAMLとsimple_form)で:

私は次のことに苦労しています:

  1. モデルがないため、フォーム エントリを検証するにはどうすればよいですか?
  2. 強力なパラメーターを使用する必要がありますか? その場合、モデルを使用せずにフォームに実装するにはどうすればよいですか?
  3. 似たようなものを作成するにはどうすればよいですか?ただし、現在の役割が既にチェックされていますか? (真の役割管理)

更新 コメントで示唆されているように、reform Gem の使用を検討しました。これは素晴らしい解決策のようです。ただし、この場合の実装には問題があります。

マップを作成しましょう: データベースに 3 つのテーブルがあります。

  1. ユーザー
  2. users_roles (2 つの属性を持つマッピング テーブル: user_id & role_id {Join Table -> HABTM})
  3. 役割

Roles モデルのすべての値をチェックボックスとして使用してフォームを作成したいと考えています。チェックボックスは、users_roles テーブルに入力される値を指定する必要があります (特定のユーザーに関連して)。私が改革に望んでいるのは、このフォームの入力を検証することです。このフォームには常に役割のすべての値が表示されますが、一部またはすべてのボックスがオフになっている場合があります。

アプリにフォーム フォルダーを作成し、次のコードから始めました。

私は正しい方向に進んでいますか?

助けてくれてありがとう。

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

ruby-on-rails - cancan 機能 : rolify ロール create_user を持つサイト管理者が新しいデバイス ユーザーを作成またはサインアップできるようにします

アプリケーションについては、cancan/cancancan、devise、および rolify を使用して、job_code スタイルのアクセスを実装しようとしています。

job_code :create_user を持つサイト管理者のみが新しいユーザーを作成できます

コードは次のとおりです。

routes.rb には、

アプリケーションコントローラー

私が使用すると、次のコードが capabilities.rb に

それは完璧に動作します。User sign_up ページに移動します

しかし、私がこのコードを持っているとき

アクセスが拒否されました(403ページ)と表示されます

ユーザーの代わりに何を使用すればよいかを理解するのに苦労していますcan :create, User