我已将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
答案 0 :(得分:0)
尝试user.add_role :admin
或user.add_role :admin, Post
然后user.has_role? :admin
如果它仍然失败,那么我认为没有设置用户和角色记录之间的索引。