从 Rails 中的用户组表查询管理员

代卡

我正在尝试为只有管理员才能看到的一组用户创建一个编辑页面。我创建了 3 个模型:

组.rb:

class Group < ApplicationRecord
...
  has_many :user_groups, dependent: :destroy
  has_many :users, through: :user_groups
...
end

用户.rb:

class User < ApplicationRecord
...
  has_many :user_groups, dependent: :destroy
  has_many :groups, through: :user_groups
...
end

用户组.rb:

class UserGroup < ApplicationRecord
  belongs_to :user
  belongs_to :group

  validates_presence_of :user_id
  validates_presence_of :group_id
end

用户组模型是一种包含布尔字段的模型,当用户是管理员时为“真”。这里是上述模型的 schema.rb:

  create_table "groups", force: :cascade do |t|
    t.string "name"
    t.text "description"
    t.bigint "user_id"
    t.integer "type"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "slug"
    t.index ["slug"], name: "index_groups_on_slug", unique: true
    t.index ["type"], name: "index_groups_on_type"
    t.index ["user_id"], name: "index_groups_on_user_id"
  end

    create_table "user_groups", force: :cascade do |t|
    t.bigint "user_id"
    t.bigint "group_id"
    t.boolean "is_admin"
    t.boolean "is_owner"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["group_id"], name: "index_user_groups_on_group_id"
    t.index ["user_id"], name: "index_user_groups_on_user_id"
  end

    create_table "users", force: :cascade do |t|
    t.string "email", default: "", null: false
    t.string "encrypted_password", default: "", null: false
    t.string "username", default: "", null: false
    t.string "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer "sign_in_count", default: 0, null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string "current_sign_in_ip"
    t.string "last_sign_in_ip"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["email"], name: "index_users_on_email", unique: true
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
    t.index ["username"], name: "index_users_on_username", unique: true
  end

我的问题是:

如何使用 usergroups.rb 中的“is_admin”字段限定管理员的范围?我一直在尝试诸如“group.usergroups.is_admin?”之类的东西。但没有结果。

为了消除疑虑,授权将由“专家”完成,我不清楚的是如何确定管理员的范围。我正在使用 rails 5.2 和 ruby​​ 2.6。

有什么建议吗?谢谢!

斯皮克曼

我会用这样的东西:

class GroupPolicy
  def update?
    UserGroup.where(user_id: user.id, group_id: group.id, is_admin: true).exists?
  end
end

可以在控制器的更新方法中使用,例如

authorize @group

或在视图中 - 例如,显示编辑链接 - 像这样

<% if policy(@group).update? %>
  <%= link_to "Edit group", edit_group_path(@group) %>
<% end %>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过管理员在ruby on rails中管理用户

来自分类Dev

允许管理员在Rails应用中以用户身份发布

来自分类Dev

使用devise gem,我的管理员如何同时充当Rails4中的管理员和用户

来自分类Dev

如何在ruby on rails中由管理员管理用户

来自分类Dev

Rails Devise限制管理员用户的IP地址访问

来自分类Dev

Rails管理员“用户名已被占用”

来自分类Dev

如何让用户ping管理员Rails设计

来自分类Dev

Rails中的管理员/用户名称空间控制器的功能是什么

来自分类Dev

Rails:仅允许管理员用户在具有Devise的Rails中创建新用户(无外部模块)

来自分类Dev

管理员将文件上传到Rails中的应用

来自分类Dev

更改 Rails 管理员字段中的值格式

来自分类Dev

仅在 rails 中对管理员进行 sidekiq 监控

来自分类Dev

将devise配置为对用户只读,但在Rails 4.2.4中为管理员提供完整的CRUD

来自分类Dev

如何在Rails 6中使用acitve admin登录到管理员帐户和用户帐户?

来自分类Dev

为什么允许非管理员用户访问我在 Rails 应用中的索引页?(设计宝石)

来自分类Dev

如何在 rails 的活动管理员中添加表中不存在的自定义列?

来自分类Dev

Rails建模管理员控制的字段

来自分类Dev

Rails:提前干掉和管理员

来自分类Dev

Rails路由管理员错误

来自分类Dev

管理员管理用户设计Rails上的路由红宝石示例

来自分类Dev

Rails管理员显示用户名,而不是用户#5

来自分类Dev

活动管理员:Rails_to在Rails 4中给出“未定义的方法”错误

来自分类Dev

具有Rails的Pundit以及用户,管理员和角色模型

来自分类Dev

将管理员用户重定向到其他页面-Ruby on Rails

来自分类Dev

让管理员查看Rails中所有用户的所有帖子

来自分类Dev

管理员用户的Rails 4 Mass Assignment白名单参数

来自分类Dev

即使有新的http请求,如何检查我的用户是否是Rails的管理员?

来自分类Dev

Rails方式,无需用户模型/登录即可在现场处理单个管理员

来自分类Dev

为非管理员用户设置不同的路由页面(属性)(在 ruby on rails 上设计 gem)

Related 相关文章

  1. 1

    通过管理员在ruby on rails中管理用户

  2. 2

    允许管理员在Rails应用中以用户身份发布

  3. 3

    使用devise gem,我的管理员如何同时充当Rails4中的管理员和用户

  4. 4

    如何在ruby on rails中由管理员管理用户

  5. 5

    Rails Devise限制管理员用户的IP地址访问

  6. 6

    Rails管理员“用户名已被占用”

  7. 7

    如何让用户ping管理员Rails设计

  8. 8

    Rails中的管理员/用户名称空间控制器的功能是什么

  9. 9

    Rails:仅允许管理员用户在具有Devise的Rails中创建新用户(无外部模块)

  10. 10

    管理员将文件上传到Rails中的应用

  11. 11

    更改 Rails 管理员字段中的值格式

  12. 12

    仅在 rails 中对管理员进行 sidekiq 监控

  13. 13

    将devise配置为对用户只读,但在Rails 4.2.4中为管理员提供完整的CRUD

  14. 14

    如何在Rails 6中使用acitve admin登录到管理员帐户和用户帐户?

  15. 15

    为什么允许非管理员用户访问我在 Rails 应用中的索引页?(设计宝石)

  16. 16

    如何在 rails 的活动管理员中添加表中不存在的自定义列?

  17. 17

    Rails建模管理员控制的字段

  18. 18

    Rails:提前干掉和管理员

  19. 19

    Rails路由管理员错误

  20. 20

    管理员管理用户设计Rails上的路由红宝石示例

  21. 21

    Rails管理员显示用户名,而不是用户#5

  22. 22

    活动管理员:Rails_to在Rails 4中给出“未定义的方法”错误

  23. 23

    具有Rails的Pundit以及用户,管理员和角色模型

  24. 24

    将管理员用户重定向到其他页面-Ruby on Rails

  25. 25

    让管理员查看Rails中所有用户的所有帖子

  26. 26

    管理员用户的Rails 4 Mass Assignment白名单参数

  27. 27

    即使有新的http请求,如何检查我的用户是否是Rails的管理员?

  28. 28

    Rails方式,无需用户模型/登录即可在现场处理单个管理员

  29. 29

    为非管理员用户设置不同的路由页面(属性)(在 ruby on rails 上设计 gem)

热门标签

归档