使用Ruby on Rails和Devise限制操作(编辑/删除)的最佳方法

时间:2010-09-30 19:56:04

标签: ruby-on-rails devise

我是Ruby On Rails的新手,现在我正在做一个简单的应用程序。在这个应用程序中,用户可以创建许多项目,我使用设计进行身份验证。当然,我想确保你是所有者,以便删除项目(团队,玩家等),现在的方式是:

def destroy
    @team = Team.find(params[:id])
    if current_user.id == @team.user_id 
      @team.destroy    
      redirect_to(teams_url, :notice => 'The team was deleted.')
    else
      redirect_to root_path
    end      
end

这是最好的方法吗?我正在考虑在模型中放置一个方法,但我不确定我是否可以从那里访问current_user。我也在想一个before_filer,比如:

before_filter :check_ownership, :only => [:destroy, :update]

我就是这种情况,如果我只想为所有对象编码一个方法(所有与之相关的对象都有一个“user_id”-field)

2 个答案:

答案 0 :(得分:1)

在我的应用程序控制器中,我把:

before_filter :authorize

def authorize
  false # Or use code here to check if user is admin or not
end

然后我覆盖实际控制器中的authorize方法,以允许访问各种操作。

答案 1 :(得分:0)

您正在寻找基于身份验证(设计)的授权解决方案

您无法访问型号中的当前用户。我使用Makandra's Aegis进行授权取得了相当大的成功。它允许您创建角色,指定归因于每个角色的权限。文档非常好,我知道它与Devise一起工作正常,这是非常不可知的,我也用它与Clearance。它还会将隐式“current_user”传递给您的权限,以便您可以指定并检查当前用户是否可以采取适当的操作。