【问题标题】:How to implement a permissions system like highrise or facebook如何实现类似 highrise 或 facebook 的权限系统
【发布时间】:2011-01-17 18:58:21
【问题描述】:

嘿,我希望在 highrise 或 facebook 中实现权限系统。

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

我正在使用 mongodb,这样应该会更容易。虽然我们也可以切换到 sql (highrise 可能会使用 sql)。

编辑:我最终编写了一个与 mongoid 一起使用的 gem,您可以阅读更多关于它的信息 here

【问题讨论】:

    标签: sql ruby-on-rails mongodb mongoid


    【解决方案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】:

    【讨论】:

    • 感谢您的回复。我以前用过cancan,但它的实现方式不同。我仍然需要一种方法来在数据库中存储有关实例(行/对象)的权限。那时我可以考虑在此之上使用cancan。 – Asaxena 7 秒前编辑
    • +1 康康舞。也许不适合这里,但它是所有的真棒
    【解决方案3】:

    你试过declarative authorization吗?

    【讨论】:

    • 是的,但同样的问题。我需要一种将实例的可见性存储在列中的方法。
    猜你喜欢
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2011-08-13
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多