【问题标题】:before_action for standard/admin users : how to give admin the rights of all other users?标准/管理员用户的 before_action :如何赋予管理员所有其他用户的权限?
【发布时间】:2015-07-09 07:25:15
【问题描述】:

我想为我的管理员用户提供比普通用户更多的权限,这里是我的 before_action :

# users_controller.rb
before_action :correct_user, only: [:edit, :update, :show]
before_action :admin_user, only: [:destroy, :index, :admin_toggle]

因此,如果您是正确的用户,您可以:编辑、更新、显示您自己的个人资料。

如果您是 admin_user,您可以查看列表(索引)、销毁您自己的个人资料、切换管理员任何用户、编辑/更新/显示您自己的个人资料(admin_user 也是正确的用户)。

我希望 admin_user 能够编辑、更新、显示其他成员的个人资料:我需要编写特定的方法还是使用 before_action 有什么技巧?

似乎 admin_user 应该拥有correct_user 的权限 - 给定任何用户 ID -。

【问题讨论】:

  • 我感觉你在混淆before_action 真正应该有什么目的。它旨在调用一种方法,而不是真正规范对资源的访问;应该由这里不是必要的其他业务逻辑控制。
  • 谢谢。读完你之后,我在网上搜索了有关使用 Rails 的管理界面的信息,而且确实有一些工具更加连贯!

标签: ruby-on-rails railstutorial.org


【解决方案1】:

如果您使用某种特定的身份验证工具,例如 Devise,例如。然后我建议实施授权解决方案 cancancan宝石。您的模型目录下有一个特定的能力文件,您可以在其中声明不同用户角色的访问权限。

让您未来的代码更加简洁易读。

###编辑:

正如前面的回答指出的那样,还有一个 CanCan gem,但据我所知,它是 Rails4 中的 not supported。在写这个答案时,github中的CanCanCan build-status被标记为failing,但我已经在我的项目中使用它很长时间了,我很高兴:)

###

ability.rb 示例:

def secretary_abilities
  can [:create, :read, :update], Person
end

def superadmin_abilities
  # superadmin can do everything that secretary can
  secretary_abilities
  # ...and can also do destructive actions
  can [:destroy], Person
end

之后,您可以像这样将检查添加到您的视图中:

<% if can? :show, Person %>
  <%= link_to 'Show', person_path(@person) %>
<% end %>

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 1970-01-01
    • 2021-05-23
    • 2014-12-13
    • 2015-07-12
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多