Rails中基于组成员关系的访问控制有哪些选项?



对于Rails,我看到了相当多的基于角色的访问控制gem选项(cancan, cantango等),但是,我没有找到任何基于组成员的访问控制gem。下面是我想要完成的事情的简单描述:

Users: a, b, c, d 
Groups: y, z
Group Membership: y has a and b; z has c and d
Posts: m, n
Ownership: a owns m; c owns n
Group y is marked as a public group. m can be seen by all users
Group z is marked as a private group.  n can only be seen by c and d

所以没有什么太花哨或复杂的,本质上是一个类似于文件系统访问控制的功能(例如read-write-execute跨owner-group-public[当然没有'execute'])

看起来Radiant(带有一些额外的插件)可以提供页面级组成员访问控制,但我不想/需要一个完整的CMS,我更喜欢基于模型的东西(如cancan)而不是基于页面/路径的东西。(顺便说一句,我使用设计为我的用户模型-有什么东西在设计我错过了吗?)

如何在Rails中实现私有/公共用户组?只能通过基于rails的CMS吗?我是不是漏掉了一些基本的东西?或者这个用例在Rails社区中很少被处理?

我找到了这个问题的答案,我想我会把它贴出来,以防有人在寻找它。

CanCan通过"条件哈希"支持组功能。这个想法是,post被标记为:group_id (belongs_to a group)和users has_many groups。然后,您可以在can语句中设置"条件哈希",如下所示:

can :manage, Post, :group => { :id => user.group_ids }

"条件哈希"的详细说明如下:

https://github.com/ryanb/cancan/wiki/Defining-Abilities

感谢@Jason_Noble把我带回到cancan文档,在那里我终于找到了它。

注。一个实现注意事项。如果您希望一些帖子公开,一些帖子私有,您可以设置一个默认组,每个用户都是其中的成员。然后,所有公共帖子都应该使用默认的group_id进行标记。

我会使用CanCan并做如下操作:

can :view_post, User if user.is_member_of_group?(z)

相关内容

最新更新