2013-03-14 79 views
0

我從頭構建用戶授權並一直在處理用戶角色。我被困在權限部分,因爲我不知道如何定義它。當我向控制器添加「before_filter:authorize」時,它會在所有頁面上顯示「未初始化的常量ApplicationController :: Permission」錯誤。如何爲用戶角色定義權限

我知道錯誤是從我application_controller.rb文件蒸:

def current_permission 
    @current_permission || Permission.new(current_user) 
    end 

    def authorize 
    if !current_permission.allow?(params[:controller], params[:action]) 
     redirect_to root_url, alert: "Not authorized." 
    end 

Permission.rb:

Class Permission < Struct.new(:user) 
    def allow?(controller, action) 
    if user.nil? 
    controller == "galleries" && action.in?(%w[index show]) 
    elsif user.admin? 
    true 
    else 
    controller == "galleries" && action != "destroy" 
    end 
    end 

我不知道的是如何在我的應用程序正確地定義權限這樣我就不會收到那個錯誤。有沒有人有任何想法?

+0

權限是一個ActiveRecord模型嗎?還是一個簡單的對象?你在哪裏定義了它? – pierallard 2013-03-14 14:50:46

+0

我剛剛添加了我的permission.rb文件。 – pwz2000 2013-03-14 14:52:02

+0

是的,請參閱下面的答案。你**肯定**應該看看** [學者](https://github.com/elabs/pundit)** – deefour 2013-03-14 14:52:15

回答

1

Permission類有2個問題:

  1. Classclass以小寫c
  2. 您缺少end關閉該課程。

我還必須指出的是,真的沒有理由要推倒重來。許多人選擇使用cancandeclarative_authorization做你想做的事情。

就我個人而言,我喜歡更輕巧的Pundit寶石,它似乎適合你想要完成的很好的事情。

+0

這沒有奏效。我做了一個編輯,並在原始文章中包含了我的permission.rb文件。我有基本的授權需求,並被告知CanCan更多的是明確的偏好。我只有兩個角色,減去客人/禁止。除此之外,它只是註冊和管理員。我是Rails的新手,我寧願看看它是如何工作的,而不是僅僅使用一些gem中的插件。我能夠讓CanCan在昨天工作,但我更喜歡從頭開始編碼,所以我可以瞭解更多。 – pwz2000 2013-03-14 14:55:44

+0

「permission.rb」位於何處?你可以在控制檯沒有麻煩的情況下運行'Permission.new(User.first)'嗎? – deefour 2013-03-14 14:56:49

+0

它在應用程序/模型。在控制檯中出現相同的錯誤。 – pwz2000 2013-03-14 14:57:22