2012-12-31 32 views
0

我想使用cancan以限制想要在我的應用程序中查看某些頁面的用戶。在我的應用程序中使用cancan和設計

,所以我試圖通過本教程做到這一點: http://www.roberthuberdeau.com/articles/9-Blog-tutorial-part-3

我有兩個角色:管理員和工人,我有兩個控制器:Tasksadmins和工人。

我想定義接下來的事情:

1)工人可以管理和看到Workerscontroller的所有事情。

2)管理員可以管理和查看Tasksadmins控制器的所有內容。

我不知道我是否正確定義它:

class Ability 
    include CanCan::Ability 

    def initialize(user) 
     user ||= User.new # guest user 

     if user.role? :Admin 
     can :manage, :tasksadmins 
     elsif user.role? :Worker 
     can :manage, :workers 
     end 
    end 
end 

下一個,我認爲我並不需要實現的是:「在高清初始化用戶位來賓用戶。」我強迫用戶能夠sign_in:before_filter :authenticate_user

接下來的事情就是:開始限制訪問基於用戶角色的博客應用:

我不知道什麼,在哪裏我應該寫。

的例子

,他寫道:

authorize! :edit, @article 

所以我試着寫在tasksadmins控制器下一如下:

authorize! :edit, @tasksadmins 
authorize! :new, @tasksadmins 
authorize! :index, @tasksadmins 
authorize! :create, @tasksadmins 
authorize! :show, @tasksadmins 
authorize! :destroy, @tasksadmins 

,但我得到了一個錯誤:undefined method 'authorize!' for TasksadminsController:Class

請幫助我,我在cancan的定義的最後。

+0

我真的很驚訝,每個角色只能訪問一個控制器。你的「任務管理員」是否實際管理「任務管理」模型對象? – willglynn

+0

是的..我的申請是:TODO清單。在tasksadmins控制器中,管理員可以爲工作人員提供任務。在「工人」控制器中,工作人員可以看到任務並只編輯完成按鈕(如果任務已完成或未完成)。 –

回答

1

本文相當過時,我建議您在github頁面上查看CanCan文檔,特別是this one。這看起來像你想要做的,但如文檔所示,你不必單獨對每一個動作採用authorize。另外,this應該幫助你與設計的第二個問題。如果您正如文章中所示指定devise的版本,我會強烈建議儘可能升級您的寶石。祝你好運!

+0

謝謝,如果我成功了,我會閱讀並通知您。 –