如何实现类似 highrise 或 facebook 的权限系统
Posted
技术标签:
【中文标题】如何实现类似 highrise 或 facebook 的权限系统【英文标题】:How to implement a permissions system like highrise or facebook 【发布时间】:2011-01-17 18:58:21 【问题描述】:嘿,我希望在 highrise 或 facebook 中实现权限系统。
此类问题的问题在于必须在对象实例上定义权限(可见性)。在我的脑海中,我可以想到将 user_ids 或 group_ids 保存在每个记录的哈希中。这是最好的方法吗?
我正在使用 mongodb,这样应该会更容易。虽然我们也可以切换到 sql (highrise 可能会使用 sql)。
编辑:我最终编写了一个与 mongoid 一起使用的 gem,您可以阅读更多关于它的信息 here
【问题讨论】:
【参考方案1】:@Abhishiv:完成这项任务后,我将实施某种形式的约定来按字段设置访问权限。
给定一个像下面这样的对象:
name : "me",
user : "me01234",
salary : "100",
address : "123 Nowhere drive"
我会通过执行以下操作来添加权限:
name : "me",
user : "me01234",
salary : "100",
address : "123 Nowhere drive"
p_salary : [ 'g/accounting', 'g/management', 'u/owner' ]
p_address : [ 'g/accounting', 'g/hr', 'u/me' ]
通过这样的约定,您可以维护文档级别的访问权限。而且很容易看出如何编写这样的东西。
现在通常您需要对象和集合本身的访问权限。这使整个过程更加干燥。对于这样的事情,我会简单地构建一个“权限”集合,其中包含数据库中每个其他集合的默认权限。
在我的脑海中,我不知道有任何框架可以“开箱即用”地做到这一点。我会看看 Mongoid 和 MongoMapper,看看这种类型的细节是否不适合插件。
【讨论】:
这似乎是要走的路。这也意味着我们将不得不使用 mongo,因为据我所知,没有办法在 sql 中查询哈希值。或者可能是 sql 和 mongo 的混合。谢谢你的回复。我会考虑把它变成一个 mongoid 的插件。【参考方案2】:看康康:https://github.com/ryanb/cancan
【讨论】:
感谢您的回复。我以前用过cancan,但它的实现方式不同。我仍然需要一种方法来在数据库中存储有关实例(行/对象)的权限。那时我可以考虑在此之上使用cancan。 – Asaxena 7 秒前编辑 +1 康康舞。也许不适合这里,但它是所有的真棒【参考方案3】:你试过declarative authorization吗?
【讨论】:
是的,但同样的问题。我需要一种将实例的可见性存储在列中的方法。以上是关于如何实现类似 highrise 或 facebook 的权限系统的主要内容,如果未能解决你的问题,请参考以下文章
如何实现功能 i.s.在建立与 SQL 的连接时控制“Incr Pool Size”或“Decr Pool Size”?类似于甲骨文