Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 授权删除(不仅如此)_Ruby On Rails - Fatal编程技术网

Ruby on rails 授权删除(不仅如此)

Ruby on rails 授权删除(不仅如此),ruby-on-rails,Ruby On Rails,让我们看看控制器: 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

让我们看看控制器:

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 
它在考试控制器中 但是我想在类似的情况下,比如说用户控制器中有这个功能。
什么是不重复我自己的正确方法?

有几件事是重复的。对于查找内容,我推荐,对于授权,它更复杂。我们正在使用“用户可能会删除”或“每个模型更新/查看”,并在IR的“生成/创建/删除/更新”资源中挂起检查。

通常的方法是向应用程序\u controller.rb添加一个方法,该方法检查用户会话是否可能传入,如果用户是从会话中找到的,根据您的代码检查该用户是否为管理员

然后,从每个其他控制器(因为它们是从ApplicationController扩展而来)添加一个before\u过滤器:check\u for\u admin、:only=>:destroy或对您关心的任何操作调用的任何方法。你可以重复之前的过滤器。。。所有控制器顶部的一行,您希望在其中使用此命令。授权逻辑被提取到它自己的方法中。我们在几个项目中使用了类似于AuthLogic的设置,您可以在谷歌上搜索特定的代码示例,但同样,通用模式是将通用控制器代码提取到应用程序控制器,并使用before_过滤器调用它