是的,您可以通過將before_filter添加到適當的refinerycms控制器來添加細粒度控制。在那個before_filter中你可以使用CanCan,但是煉油廠已經有了一個角色表,你可以很容易地使用它。
例如,下面介紹一種控制對博客訪問的方法。
使用您選擇的控制檯或其他界面,添加一個標題爲「member」的新角色。
添加另一個與標題=「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的/配置/ 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,管理員:: BaseController,管理員:: RefinerySettingsController,聯繫::博客:: PostsController等,並添加處理方法與「premium_user」等其他角色相關g關於您要實施的授權規則。
或者,你可以直接在你的應用程序/文件夾的控制器使用
rake refinery:override controller=blog_controller #for example.
然後你就可以將呼叫類似慘慘覆蓋煉油廠控制器,或過濾器之前添加上面直接。如果你重寫,當它改變時升級refinerycms會有點困難,因爲當它改變時,你有額外的重寫和重新合併你的代碼和最新版本的控制器的步驟。
Re:「admin」用戶,refinerycms已經開始利用title =「Superuser」的角色,並要求至少有1個用戶具有該角色。它預先配置了一些授權邏輯,以供超級用戶可以執行的操作,那些沒有該角色的用戶無法做到這一點。