Ruby on rails 3 如何在使用设备时未授权用户操作?

Ruby on rails 3 如何在使用设备时未授权用户操作?,ruby-on-rails-3,devise,cancan,Ruby On Rails 3,Devise,Cancan,我正在Rails 3.1应用程序上使用Desive和Cancan gems 我向用户添加了几个附加列 我成功地定义了这些功能,它们工作得很好,我可以看到它工作得很好,但我还没有弄清楚如何对操作(例如:更新)进行未授权,因为我没有权限访问Desive或User controller 如何工作?向用户添加一个字段,例如:approved,并使其仅可供管理员访问 在应用程序控制器中编写一个过滤器,因为您可以保持一切干燥,一旦开始使用授权,您将大量使用它 def verify_approval un

我正在Rails 3.1应用程序上使用Desive和Cancan gems

我向用户添加了几个附加列

我成功地定义了这些功能,它们工作得很好,我可以看到它工作得很好,但我还没有弄清楚如何对操作(例如:更新)进行未授权,因为我没有权限访问Desive或User controller


如何工作?

向用户添加一个字段,例如
:approved
,并使其仅可供管理员访问

应用程序控制器
中编写一个过滤器,因为您可以保持一切干燥,一旦开始使用授权,您将大量使用它

def verify_approval
  unless current_user.approved
    flash[:error] = I18n.t("not_approved")
    redirect_to(root_path)
  end 
end
然后在用户需要权限的地方使用该过滤器:

class RandomsController
  before_filter :verify_approval, only: [:update]

砰,完成了。无需编辑设备或
用户控制器

或尝试在ability.rb中使用以下命令

 if user.role? :admin
  can [:create, :read], [Model1, Model2]
 end

 if user.role? :user
  can [:read], Model1, :id => user.id
 end
 ...
 can [:copy_model, :read], Model1, :id => user.id
 ...
这将允许管理员创建或读取,但不允许更新。并允许用户阅读Model1(如果它属于他们)。如果创建自定义操作,如“复制模型”,则可以将其添加到ability.rb

 if user.role? :admin
  can [:create, :read], [Model1, Model2]
 end

 if user.role? :user
  can [:read], Model1, :id => user.id
 end
 ...
 can [:copy_model, :read], Model1, :id => user.id
 ...

您可能希望结合提供的两个答案。Tsagadai正确地向您展示了如何使用before_过滤器来控制访问,simonmorley正在使用CanCan角色,就像您希望的那样。是的,但我何时何地将:approved设置为TRUE?如何让它只对管理员开放?哦,我现在明白你的意思了。我想要的是允许用户编辑自己的个人资料,而不是其他人。您的解决方案是只允许管理员编辑配置文件,对吗?那不是我需要的啊,好吧。你说没有设计权是什么意思?只是想弄清楚你到底需要什么?SSince designe是一个引擎,我无法访问用户\u控制器以调用授权!:更新,@user正在编辑或创建,例如。然后我意识到我根本不需要这么做。所以我想我现在应该结束这个问题。Thx SimonGlad你已经修好了。我相信您已经阅读了wiki,但您可以覆盖控制器操作。对不起,如果你已经试过了。祝你好运,我希望你把它修好。