【问题标题】:How to allow only Admin (or some user) to edit the pages in Rails?如何只允许管理员(或某些用户)编辑 Rails 中的页面?
【发布时间】:2023-09-01 14:51:01
【问题描述】:

我有一个财务脚手架,我刚刚意识到任何登录用户都可以通过转到 /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 为真,其他用户为假。现在我不知道该怎么办?即使我在 Finance.rb 模型中添加了“资源化”,我仍然可以看到所有用户都能够编辑页面。有什么帮助吗?

【问题讨论】:

  • 提供的任何解决方案都回答了您的问题吗?
  • @zeantsoi - 在问题中添加了更多信息。我正在尝试 cancan + rolify 方法,但仍然卡住
  • 您是否按照github.com/ryanb/cancan 的建议将 load_and_authorize_resource 放入您的财务总监

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


【解决方案1】:

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

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

【讨论】:

  • 是的,我正在使用 devise,我看到 github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role,这很好,所以我应该使用它还是应该使用 rolify ?我也不能只在控制器中使用“if uid == 1”或类似代码吗?
  • 是的,你可以这样做.. 是的,如果你只是有这个简单的案例,并且你的站点中不需要其他角色,我会选择设计 wiki 链接方法 :)
  • 嗨,我通过了这个github.com/EppO/rolify/wiki/Tutorial 并已将角色“admin”分配给 user = User.find(1),一切顺利到“ability.can?:manage,:all”控制台,对用户 1 显示 TRUE,对其他用户显示 false。现在我不知道该怎么办?即使我在 Finance.rb 模型中添加了“资源化”,我仍然可以看到所有用户都能够编辑页面。有什么帮助吗?谢谢
  • 所以你已经将它添加到 app/models 中的 ability.rb 文件中了吗?如果 user.has_role? :admin 可以 :manage, :all else 可以 :read, :all end
  • 嘿伙计,我又来了……我做了一些挖掘……看看这个*.com/questions/16096763/…
【解决方案2】:

我不确定您的模型是如何设置的,但假设您的 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]

【讨论】:

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

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

【讨论】:

  • 嗨,我通过了这个github.com/EppO/rolify/wiki/Tutorial,它安装了cancan + rolify,并为user = User.find(1)分配了角色“admin”,一切顺利到“ability.can?:manage , :all" 在控制台中,对用户 1 显示 TRUE,对其他用户显示 false。现在我不知道该怎么办?即使我在 Finance.rb 模型中添加了“资源化”,我仍然可以看到所有用户都能够编辑页面。有什么帮助吗?谢谢
  • 请用一些代码更新您的问题。如果不查看您正在处理的内容,就很难诊断出正在发生的事情。
最近更新 更多