我是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)
答案 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”传递给您的权限,以便您可以指定并检查当前用户是否可以采取适当的操作。