目前,在我的应用程序中,访问者只能拥有 3 个角色:
admin
拥有所有特权user
可以在系统内执行多项关于他/她自己的动作guest
可以观看和发送错误报告
一切都是原始实现的,如下所示:在数据库中,每个用户都有一个字段,其中指示了他的存在admin
(代表2
该字段)或user
(1
),并且在application_controller.rb
其中仅检查if logged_in? && current_user.DB_FIELD == 2
(或> 0
),并且在必要的控制器中发生支票before_filter
等
然而,直到最近,当我们决定扩展系统的功能时,这样一个简单的实现仍然很有效,也就是说,部分是允许管理员将用户加入到组中,但也有一些时候。为了更好地理解我要问的问题,让我从我看到的方式描述情况(也许你可以提出更好和合乎逻辑的建议):
- 我是管理员。我打开
/groups
,然后查看组列表。- 什么是组?一方面,组是一组权限,另一方面,是在我的应用程序中应该具有相同权限的用户的组合。
- 什么是许可?权限是分配给它的组的每个用户都可以执行的一项操作。
- 我想将新用户合并到一个组中,但该组不存在。所以我单击按钮(代表
/groups/new
),然后弹出创建组窗口。在那里,我有一个用于组名的文本字段、大量复选框,每个复选框代表一个权限、一个用于添加用户的字段和一个保存按钮。我写了组名,检查我要分配给这个组的所有权限,将用户添加到这个组(我将通过ajax搜索来实现这个:开始输入用户名,他/她出现,单击Enter,然后一个添加用户,然后在需要时重复这些操作 - 这是一种好的方法吗?),然后单击保存。 - 好的,我有一个有几个用户的新组。但是停下来,我意识到我忘了再添加一个人!我返回编辑组窗口 (
/groups/edit
),并重新填写错误填写的字段。单击“保存” - 又是一些魔法(我的意思是,通过数据库更新操作)。
那么,我在最后阶段有什么?我可以自由地 c/r/u/d 组,管理其中的用户和权限,并以非常 GUI 驱动的方式执行它(我的意思是,复选框、ajax 搜索字段等)
两周以来,我一直在谷歌搜索/stackoverflowing/审查有关基于 rails 角色和基于组的授权的信息;已经找到了很多解决方案,如 cancan、easy_roles、troles等 gem,但在其中任何一个中都找不到如何实现基于组的方法,这是动态的(或可定制的?或动态可定制的?)。唯一真正 100% 满足我需求的是redmine权限和权限组方法,但由于其超过 9000 个功能,它过于复杂,所以我什至无法完全理解它是如何实现的,更不用说我自己实现了.
问题是(假设权限集是永久的,因此可以硬编码,并且组集是绝对免费的;此外,如果用户不属于任何组,他/她具有默认用户权限;此外,权限不仅适用于 c/r/u/d 操作,还适用于手动创建的方法):
- 实施上述系统的最佳方法是什么?我没有找到任何现有的宝石或方法?
- 如何轻松地为可扩展性存储权限和权限组?位掩码或单独的权限、权限组分配和组表?
- 如何轻松地将用户分组?用户数据库行中的组字段,还是单独的用户到组分配表?
优选地,分配给用户被添加到的组的权限立即应用于他,而无需任何用户重新登录。
提前谢谢你!