如何实现像highrise或facebook这样的权限系统

时间:2011-01-17 18:58:21

标签: sql ruby-on-rails mongodb mongoid

嘿我想要实现像highrise或facebook这样的权限系统。

此类问题的问题是必须在对象的实例(可见性)上定义权限。在我的脑海中,我可以考虑在每个记录的哈希中保存user_ids或group_ids。这是最好的方法吗?

我正在使用mongodb,因此应该更容易。虽然我们也可以切换到sql(高层可能会用sql)。

编辑:我最终写了一个与mongoid一起工作的宝石,你可以阅读更多关于它的信息here

3 个答案:

答案 0 :(得分:2)

@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,看看这种类型的细节是否适合插件。

答案 1 :(得分:1)

答案 2 :(得分:1)

你试过declarative authorization吗?