Rails_admin 编辑特定模型视图的权限

Rails_admin permission on edit view of specific model

我正在使用 rails_admin gem 和 rails 4. 目前我正在使用这种方法

# Authorize just admin for '/admin'
  config.authorize_with do
    redirect_to main_app.root_path unless warden.user.admin == true
  end

config/initializers/rails_admin.rb 下仅允许管理员用户访问仪表板。问题:如果当前用户是管理员并且 he/she 试图将她的权限更改为普通用户(取消勾选)admin 框,那么他们会收到一条错误消息说 no method for nil:admin - 发生这种情况是因为 /admin 此普通用户不再可用。问题:如何禁止当前用户编辑他自己的 admin 属性???

我认为最好的方法是在他们按下用户列表上的编辑按钮时查看他们正在编辑的用户是否与 current_user 匹配(当前用户的信息可以抓取为 _current_user 来自 rails_admin) 并检查两个唯一用户 id/token 是否匹配。如果它们确实匹配,那么您可以禁用该复选框。

我只是用

覆盖了app/views/rails_admin/main/_form_boolean.html.erb
<!-- Do not authorize current user to change his own admin property -->
<% if (field.name.to_s == "admin") && (request.original_fullpath.split("/")[-2].to_s == _current_user.id.to_s) %>
<p style = "color:red; margin-top: 10px; font-weight: bold;"> unavailable for this account </p>
<% else %>
<div class="checkbox">
    <label style="display: block;">
        <%= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, checked: field.form_value.in?([true, '1']), required: field.required}) %>
    </label>
</div>
<% end %>

然后,在我的 config/initializers/rails_admin.rb

edit do
      field :email  do
        required true
      end
      field :admin
      field :password  do
        required true
      end
      field :password_confirmation do
        required true
      end
      field :id, :hidden do
        default_value do
          bindings[:view]._current_user.id
        end
      end