2010-08-21 40 views
0

让我们来看看控制器:权威性 - 删除(不仅如此)

def destroy 
    if session[:user_id] && User.find(session[:user_id]).is_admin 
      @exam = Exam.find(params[:id]) 
      @exam.destroy 
    else 
      redirect_to :back, :notice => "You cant do that!" 
      return 
    end 
     redirect_to :root 
    end 

其在考试控制器 但我想类比有让我们说User_controller此功能。 什么是适当的方式来重复自己?

回答

0

有几件事情是重复的。对于找到的东西,我建议inherited resources和授权,它更复杂。我们使用每个型号的#may_be_deleted_by?(user)(或更新/查看),并勾选IR的build/create/delete/update_resource

0

执行此操作的一般方法是为您的application_controller.rb添加一个方法,用于检查用户会话(可能会传递给用户),并且如果从会话中找到用户,则检查该用户是否每个代码为is_admin

然后从您的每个其他控制器,因为它们从ApplicationController延伸,请在您关心的任何操作中添加一个before_filter :check_for_admin, :only => :destroy(或任何您的方法称为)。您可以在您想要使用它的所有控制器的顶部重复before_filter...行。授权逻辑被提取到它自己的方法。我们在几个项目中使用了AuthLogic这样的设置,您可以通过谷歌搜索特定的代码示例,但是一般模式是将常用控制器代码提取到应用程序控制器并使用before_filter调用它。