在AdminUser中禁止具有条件的操作项

时间:2016-05-18 09:30:24

标签: ruby-on-rails ruby activeadmin

这里的第一个问题,我希望具体而不是愚蠢。 我也是Rails和AdminUser的新手,我想创建一个控制器,只有当current_user属于某种类型时才显示菜单项(在我的例子中:Lektor)。

我写过这样的话:

  disallowed_actions = []
  disallowed_actions << :create if proc {current_admin_user.departments.to_a[0].name != "Lektor" }
  actions :all, :except => disallowed_actions

但它不起作用,我认为这是因为我在proc中引用的current_admin_user与控制器不同,但我也不能引用方法或proc之外的current_admin_user。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

创建迁移,运行:rails g migration AddRoleToUsers role:string以向用户添加角色。

迁移bundle exec rake db:migrate

在你的rails c中运行User.first.update_attributes(:role => 'admin'),这将为数据库中的第一个用户添加一个'admin'角色。

在您的用户模型(user.rb)中创建此方法:

def admin?
  role == 'admin'
end

现在在视图中(假设你正在使用erb)你想隐藏普通用户的动作添加:

<% if current_user.admin? %>
  # show stuff
<% end %>

注意: current_user是设计方法,如果您没有使用设计,则需要使用自己的方法来检查当前已登录的用户,你可以用会话来做。

请参阅Rails: where does the infamous "current_user" come from?

通过这种方式,您可以向不是管理员的用户隐藏内容。