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