我在我的 rails 应用程序中使用了 cancan 和 rolify。现在我想在我的 Rails 可安装引擎(隔离命名空间)中使用这些,至少 rolify。我很努力,但徒劳无功。当先前失败时,我也将角色模型放入 models/myengine/ 和 models/ 中。它在角色适配器级别抛出错误,说 has_role? 找不到。提前致谢。
问问题
441 次
2 回答
2
我对 rolify 也有类似的问题。我也无法让它在可安装的引擎中工作。看起来它只是不适用于引擎。我建议您改用simple_roles gem - 这是我使用过的,在可安装引擎中使用它没有问题。
更新 Rolify 添加了对命名空间的支持,因此这不再有效。我已经成功地在我的引擎中使用了它。你现在可以做 rails g rolify EngineName::Role EngineName::User
于 2012-12-14T16:43:57.613 回答
0
我正在转换一个正常工作的 Rails 4.2。应用程序进入引擎。这些表已经创建为“用户”、“角色”和“用户角色”。
为了让它在引擎中工作,用户只需要这个定制:
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"]]
于 2018-12-21T19:05:52.077 回答