2011-08-24 50 views
4

我在考慮將RefineryCMS用於包含新聞通訊,博客,論壇,教程等的大型Web應用程序。創建我所知道的這些東西RefineryCMS將會非常棒。我可以使用Cancan或類似的RefineryCMS嗎?

我的問題是RefineryCMS可以處理具有不同類型訪問權限的不同類型的用戶嗎?

如果我有一個用戶是'會員',我想讓他們能夠訪問博客和論壇,但是如果我有'高級'用戶,他們應該有權閱讀新聞簡報,博客,論壇和教程。 'admin'用戶應該能夠管理和查看網站中的所有內容。

這種類型的細粒度控制不在RefineryCMS的範圍之內,我應該考慮從頭開始創建這個站點嗎?

回答

10

是的,您可以通過將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個用戶具有該角色。它預先配置了一些授權邏輯,以供超級用戶可以執行的操作,那些沒有該角色的用戶無法做到這一點。

相關問題