はい、適切な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人のユーザーがそのロールを持っている必要があります。スーパーユーザーが実行できることに対して、その役割を持たないユーザーが実行できないことを許可するロジックが事前構成されています。