具有只读访问权限的Rails管理表

时间:2019-11-21 13:36:31

标签: ruby-on-rails rails-admin

我正在使用带有rails_admin的Rails服务器

我想在我的include_models中添加一个表,但是我不想让对其中一个/几个模型的写权限:

我的管理员如下:

# frozen_string_literal: true

RailsAdmin.config do |config|
  ### Popular gems integration

  # == Devise ==
  config.authenticate_with do
    warden.authenticate! scope: :user
  end
  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app

  end

  config.included_models = %w[ MyModel1
                               MyModel2]
end

我想添加类似的内容

config.read_only_models =  %w[MyModel3, MyModel4]

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我将答案分为两部分,因为它可能适用于不同的情况:

一般情况:
可以通过为模型添加readonly?方法来设置一般行为。
如果该值设置为true,则尝试更新记录将导致错误。
有关更多详细信息,请参见here

def readonly?
  true
end

ActiveRecord的基础持久性将在创建或更新任何记录之前检查readonly?
您还可以添加动态内容检查,例如:

def readonly?
  read_only_list.include? (self.class.name)
end

RailsAdmin特定行为(第二种情况):
如果要为RailsAdmin设置特定的行为,可以创建一个特殊角色,然后使用 CanCanCan 。这是一个授权库,用于限制允许给定用户访问哪些资源。
它还可以使用Ability类限制RailsAdmin并授予访问权限,该类根据用户角色定义不同的权限。
参见示例如何Use different Ability classes for front-end and admin

答案 1 :(得分:0)

您需要在rails admin模型配置上执行此操作,才能访问当前用户。 恐怕这排除了在RailsAdmin.config级别执行此操作的可能性。

您需要按字段进行操作。

2>

不太理想,但通过查看从edit继承的base动作的代码,您会发现在当前的动作实现中这是不可能的。