3

内部サイトに Ruby on Rails を使用しています。サイトのさまざまなユーザーが、多種多様なデータにアクセスし、データの非常に異なる視点にアクセスできます。これらの異なるクラスのユーザーには、アクセス レベルが必要です。アクセス レベル内で、他のクラスのユーザーから機能を追加できるようにする必要があります。

イントラネット サイトのリリースされた「バージョン 1.0」では、一般的なユーザー クラスを実装しました。私は今、ユーザー アクセスのより細かい制御を実装する必要があります。

問題はどのようにですか?

データベース スキーマを展開せずに、どこでも <% if feature_allowed %> タグを使用してビュー コードを設定せずに、ユーザー設定 (マップを表示する (または表示しない)、この機能にアクセスするが、この機能にはアクセスしない) をコーディングするための一般的に受け入れられている方法は何ですか。

4

2 に答える 2

3

もう1つのまったく異なるアプローチは、acts_as_authenticatedプラグインと承認プラグインを使用することです。テーブルはプラグイン(つまり、 usersrolesroles _users)によって作成されます。ドキュメントから:

承認プラグインは以下を提供します。

  • #permitと#permitを使用して、クラスまたはインスタンスのメソッドレベルで承認を確認する簡単な方法は?

  • アプリケーション全体、モデルクラス、またはモデルのインスタンス(つまり、特定のオブジェクト)のロールを使用した承認。

  • 定義された役割を利用する英語のような動的メソッド。「user.is_fan_ofangelina」や「angelina.has_fans?」などのメソッドを使用できるようになります。ここで、「fan」はロールテーブルでのみ定義されます。

  • データベースの複雑さのレベルに合わせてミックスインを選択してください。すべての機能について、「オブジェクトロールテーブル」を使用する必要があります(以下を参照)。

于 2008-08-28T20:57:43.527 に答える
2

<% if feature_allowed %> タグをどこにでもビューコードに入力します。

私はあなたがそれをしたいとは思わない。提案された代替手段がどれも実用的ではないと仮定すると、少なくとも、これらのチェックをコントローラーに移すことを検討する必要があります。コントローラーでは、それらを before_filter にリファクタリングできます。

「Rails を使用したアジャイル Web 開発」(第 2 版の私のコピーの 158 ページ) のセクション 11.3 を参照してください。

于 2008-08-29T09:41:09.417 に答える