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

时间:2016-11-17 09:45:30

标签: ruby ruby-on-rails-3 authorization rails-admin

我正在使用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下的

仅允许管理员用户访问信息中心。问题:如果当前用户是管理员并且他/她正试图将其权限更改为常规用户(未标记)admin框,那么他们会收到错误消息no method for nil:admin - 这是因为{{1}此常规用户不再可用。问题:如何禁止当前用户编辑自己的/admin属性?

2 个答案:

答案 0 :(得分:0)

我认为最好的方法是在他们按下用户列表上的编辑按钮时查看他们正在编辑的用户是否与current_user匹配(当前用户的信息可以从_current_user抓取rails_admin)并检查两个唯一的用户ID /令牌是否匹配。如果匹配,则可以禁用该复选框。

答案 1 :(得分:0)

我刚用

覆盖了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