我在我的rails应用程序中使用了cancan和rolify。现在我想在我的rails可安装引擎(隔离命名空间)中使用这些,至少rolify。我努力但是徒劳无功。我将角色模型放在模型/ myengine /和models /中,当之前的失败时。它在角色适配器级别抛出错误说has_role?找不到。 提前谢谢。
答案 0 :(得分:2)
我在rolify方面遇到了类似的问题。我也无法在可安装的引擎内工作。它看起来好像不适合引擎。我建议您使用simple_roles gem代替 - 这是我使用过的,在可安装引擎中使用它没有问题。
<强>更新强> Rolify添加了对命名空间的支持,因此不再有效。我已成功在我的引擎中使用它。您现在可以执行rails g rolify EngineName :: Role EngineName :: User
答案 1 :(得分:0)
我正在转换可工作的Rails 4.2。应用程式加入引擎。这些表已经创建为“用户”,“角色”和“ users_roles”。
要使其在引擎中正常运行,用户只需进行以下自定义即可:
rolify role_cname: 'EngineName::Role', role_join_table_name: 'users_roles'
在控制台中进行测试:
EngineName::User.last.roles
SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1
SELECT "roles".* FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 [["user_id", "xxxx"]]
EngineName::User.last.has_role? :admin
SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1
SELECT "roles".* FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 AND (((roles.name = 'admin') AND (roles.resource_type IS NULL) AND (roles.resource_id IS NULL))) [["user_id", "xxxx"]]