【问题标题】:Rolify has_role? method returning false instead of trueRolify has_role?方法返回 false 而不是 true
【发布时间】:2015-04-02 02:13:08
【问题描述】:

我已将 Rolify gem 添加到我的项目中并成功初始化它。我遇到了一个奇怪的问题?

用户对象具有用户和管理员角色。

[1] pry(#<API::V1::PostPolicy>)> current_user.roles
=> [#<API::V1::Role:0x007fb70602be48
  id: "19810121-ea16-4d86-b36c-475fad0f7dec",
  name: "user",
  resource_id: nil,
  resource_type: nil,
  created_at: Thu, 02 Apr 2015 02:05:27 UTC +00:00,
  updated_at: Thu, 02 Apr 2015 02:05:27 UTC +00:00>,
 #<API::V1::Role:0x007fb705ee6858
  id: "a51c59e2-9dd0-4838-b159-1af11f7db15d",
  name: "admin",
  resource_id: nil,
  resource_type: nil,
  created_at: Thu, 02 Apr 2015 02:05:27 UTC +00:00,
  updated_at: Thu, 02 Apr 2015 02:05:27 UTC +00:00>]

当我查询管理员角色时,我看到了一个奇怪的行为。

[2] pry(#<API::V1::PostPolicy>)> current_user.has_role? :admin
=> false

我正在尝试使用 Pundit 和 Rolify 执行策略,以上输出来自策略测试。

V

更新

我正在使用带有 rolify 的 UUID。 rolify的迁移如下。

   class RolifyCreateAPIV1Roles < ActiveRecord::Migration
      def change
        create_table :api_v1_roles, id: :uuid do |t|
          t.string :name
          t.uuid :resource_id
          t.string :resource_type

          t.timestamps
       end

    create_table(:api_v1_users_api_v1_roles, :id => false) do |t|
      t.uuid :user_id
      t.uuid :role_id
    end

    add_index(:api_v1_roles, :name)
    add_index(:api_v1_roles, [ :name, :resource_type, :resource_id ])
    add_index(:api_v1_users_api_v1_roles, [ :user_id, :role_id ])
  end
end

【问题讨论】:

    标签: ruby-on-rails rolify


    【解决方案1】:

    试试user.add_role :admin 或user.add_role :admin, Post 然后user.has_role? :admin
    如果它仍然失败,那么我相信用户和角色记录之间的索引没有设置。

    【讨论】:

    • 我明白了。试试user.reload
    • 我确实尝试了所有建议的方法。正如您所怀疑的,这可能与索引有关。我已经用 rolify 表的迁移文件更新了我的帖子。
    • 在桌子上,api_v1_users_api_v1_roles,为什么id是false?将其更改为 true 并删除和创建表并在 sqlite 中迁移
    • 我发现了这个问题。这是我的错误。我忘记将用户表的主键更改为 UUID。感谢您引导我解决问题。 V
    • 哈哈。惊人的!是的,在处理一些表格和列时会发生这种情况;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2014-04-24
    相关资源
    最近更新 更多