4

ニュースレター、ブログ、フォーラム、チュートリアルなどを含む大規模なWebアプリケーションにRefineryCMSを使用することを検討しています。RefineryCMSが得意だとわかっているものを作成します。

私の質問は、RefineryCMSは、さまざまなタイプのアクセス/許可を持つさまざまなタイプのユーザーを処理できるかどうかです。

「メンバー」のユーザーがいる場合は、ブログやフォーラムにアクセスできるようにしたいのですが、「プレミアム」のユーザーがいる場合は、ニュースレター、ブログ、フォーラム、チュートリアルを読むことができます。'admin'ユーザーは、サイト内のすべてを管理および表示できる必要があります。

このタイプのきめ細かい制御はRefineryCMSの範囲外ですか?このサイトを最初から作成することを検討する必要がありますか?

4

1 に答える 1

10

はい、適切なrefinerycmsコントローラーにbefore_filterを追加することで、細粒度の制御を追加できます。そのbefore_filterではCanCanを使用できますが、refinerycmsには、これに簡単に活用できるロールテーブルがすでにあります。

たとえば、ブログへのアクセスを制御する1つの方法があります。

コンソールまたは選択した他のインターフェースを使用して、title="member"で新しいロールを追加します。

title="premium_user"で別のものを追加します

次に(認証モデルがユーザーと呼ばれる場合)、コンソールで

>member1 = User.find(1)
>member1.roles << Role.where(:title=>"member").first
>member1.save

同様に、適切なユーザーに「premium_user」ロールを追加します。

MyApp / lib/restrict_blog_to_member_role.rbを作成します

module RestrictBlogToMemberRole
  def restrict_blog_to_member_role
    return true unless !(current_user.try(:has_role? "member")
    flash[:notice]="Please become a member with us before accessing the blog."
    redirect_to home_path #or some other destination path that exists
    return false
  end
end

MyApp / config / application.rbで、before_filterを設定して、サーバーが実行されている状態で変更した場合に、開発モードでの呼び出しごとに再読み込みされるようにします。

module MyApp
  class Application < Rails::Application
    ....
    config.before_initialize do
      require 'restrict_blog_to_member_role'
    end
    config.to_prepare do
      BlogController.send :include, RestrictBlogToMemberRole
      BlogController.send :before_filter, :restrict_blog_to_member_role
    end
    ....
  end
end

PagesController、Admin :: BaseController、Admin :: RefinerySettingsController、Admin :: Blog :: PostsControllerなどの他の製油所コントローラーでも同じことができ、承認ルールに応じて、「premium_user」などの他の役割を処理するメソッドを追加できます。実装したい。

または、次を使用して、app/controllersフォルダー内の製油所コントローラーを直接オーバーライドすることもできます。

rake refinery:override controller=blog_controller #for example.

次に、CanCanのようなものへの呼び出しを組み込むか、上記のbeforeフィルターを直接追加できます。オーバーライドすると、コードが変更されたときにコードを再オーバーライドして最新バージョンのコントローラーに再マージするという追加の手順があるため、変更時にrefinerycmsをアップグレードするのは少し難しくなります。

Re: "admin"ユーザー、refinerycmsはすでにtitle = "Superuser"のロールを活用しており、少なくとも1人のユーザーがそのロールを持っている必要があります。スーパーユーザーが実行できることに対して、その役割を持たないユーザーが実行できないことを許可するロジックが事前構成されています。

于 2011-08-24T18:28:40.570 に答える