我正在使用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
属性?
答案 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