3

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

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

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

编辑 1 - 我浏览了这个https://github.com/EppO/rolify/wiki/Tutorial并将角色“admin”分配给 user = User.find(1),一切顺利到“ability.can?:manage , :all" 在控制台中,对用户 1 显示 TRUE,对其他用户显示 false。现在我不知道该怎么办?即使我在 Finance.rb 模型中添加了“资源化”,我仍然可以看到所有用户都能够编辑页面。有什么帮助吗?

4

3 回答 3

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]

于 2013-04-17T05:46:55.397 回答
3

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

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

于 2013-04-17T05:47:12.583 回答
2

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

于 2013-04-17T05:44:44.917 回答