2

我对 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”字段)

4

2 回答 2

1

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

before_filter :authorize

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

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

于 2010-09-30T20:02:50.080 回答
0

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

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

于 2010-09-30T20:03:18.020 回答