Rolify has_role?返回false而不是true的方法

时间:2015-04-02 02:13:09

标签: ruby-on-rails rolify

我已将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

更新

我正在使用UUID和rolify。 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

1 个答案:

答案 0 :(得分:0)

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