我在 Rails 3 Web 应用程序上设置权限时遇到了一些问题。我目前使用 Devise 和 CanCan。我有一个由 Devise 使用的用户模型。角色是管理员、经理和用户。
我的解决方案使用命名空间来分隔管理面板。
Root (frontend)
- static pages
Manager
- administration pages for "manager" roled users.
Backend
- administration pages for "admin" roled users.
我阅读了文档和一些教程,但我可以让它工作。我的问题是 CanCan 通过用户尝试在模型上执行的操作来检查能力。
因此,如果用户作为经理登录并且必须管理他自己的帖子,他可以通过继续 /manager/posts 来做到这一点。但问题是他也可以去 /backend/posts 目录并且可以索引他不是所有者的帖子。
出现此问题是因为能力类告诉经理可以索引 Post 模型,但经理和管理员都在使用 Post 模型。
有没有办法指定允许用户访问的命名空间?
我看到有很多方法,比如使用命名空间模型(Backend::Posts Manager::Posts,使用不同的表)......
使用 Devise 和 CanCan 管理角色在相同模型上工作的命名空间应用程序权限的最佳解决方案是什么?