0

我在设计 current_user 时遇到问题,将我的模型的 :id 混淆为用户 :id。

路线:

match "/causes/:id/:slug" => "causes#show", :as => :cause, :via => 'get'
match "/causes/:id/:slug/edit" => "causes#edit", :as => :edit_cause, :via => 'get'
match "/causes/:id/:slug" => "causes#update", :via => 'put'

resources :causes, :only => [:index, :new, :create]

在我的:原因控制器中:

before_filter :check_privileges, only: [:new, :create, :edit, :new, :update]

def check_privileges
    #when I use this code everyone can access edit, etc.
    redirect_to root_path unless current_user
end

在我的 :causes 模型中

  belongs_to :user

出于某种原因,当我完全使用 current_user 时,在这个控制器中,它总是认为 current_user 等于 /causes/:id/:slug/ 中的 id

我尝试将检查权限代码放在应用程序控制器中,

我什至尝试过分配这样的代码:

def check_privileges
    #when I use this code no one can access edit, etc
    @user = User.find_by_id(params[:id])
    redirect_to root_path unless @user
end

我需要帮助,有人有建议吗?我想要做的就是验证用户是当前用户,所以不是每个人都可以编辑原因。

4

1 回答 1

0

你的帖子有点混乱。IIRC 设计将当前用户 id 存储在会话中,并且不会从 url 中获取它。

看到这是与特权相关的问题并推出您自己的解决方案。我强烈推荐一个替代方案。

https://github.com/ryanb/cancan

这对设计很有用,应该可以解决您的问题

于 2012-05-08T13:40:04.747 回答