如何只允许Admin(或某些用户)编辑Rails中的页面?

时间:2013-04-17 05:38:34

标签: ruby-on-rails ruby-on-rails-3 cancan rolify

我有一个脚手架财务,我刚刚意识到任何登录用户都可以通过转到/ finances / 1 / edit

进行编辑

我已经安装了activ_admin gem,但我不认为这是我需要的。如何确保除管理员(或可能是某些用户)之外没有人可以编辑财务资源类型 - 我

编辑 - 我发现https://github.com/EppO/rolify,这是最好的选择,还是我仍然可以做得更好,因为它可能有点矫枉过正?

编辑1 - 我经历了这个https://github.com/EppO/rolify/wiki/Tutorial并为user = User.find(1)分配了角色“admin”,一切顺利到控制台中的“ability.can ?: manage,:all”对于用户1显示为TRUE,对于其他用户显示为false。现在我无法弄清楚该怎么办?即使我在finance.rb模型中添加了“resourcify”,我仍然可以看到所有用户都能够编辑页面。有帮助吗?

3 个答案:

答案 0 :(得分:3)

我不确定您的模型是如何设置的,但假设您的User模型有管理列,您可以执行以下操作:

FinancesController < ApplicationController
  before_filter :must_be_admin, only: :edit

  def edit
    ...
  end

  private

  def must_be_admin
    unless current_user && current_user.admin?
      redirect_to root_path, notice: "Some message"
    end
  end
end

您可以添加前过滤器所需的任何操作,例如before_filter :must_be_admin, only: [:edit, :destroy]

答案 1 :(得分:2)

如果您希望在不推广自己的解决方案的情况下添加合理的用户授权,请务必查看CanCan。其作者Ryan Bates也this screencast也很有帮助。

答案 2 :(得分:2)

好吧,我个人对我的项目使用rolify并且喜欢它..但说实话,只需在您的User模型中添加“admin”列并将其默认为false即可轻松实现。当您希望用户成为管理员时,将该属性更新为true,然后要求User.admin == true访问财务编辑操作...您可以通过从控制器重定向非管理员用户(在财务编辑行动)

顺便说一句,如果您正在使用设计进行身份验证,请查看Devise before_filter authenticate_admin?