【问题标题】:How does Facebook handle Privacy settings in database side?Facebook 如何处理数据库端的隐私设置?
【发布时间】:2011-05-23 07:50:17
【问题描述】:

设计像 facebook 这样的隐私系统的设计模式是什么。

用户根据他的朋友组决定分享哪些信息。所有用户信息(电子邮件、电话)都存储在数据表中,即 key = value 表。

当前表:

  • 用户 - (id)
  • UserData -(id、user_id、数据类型、值)
  • 友谊 - (user_id,friend_id,friendgroup_id)
  • FriendGroup - (user_id, name)

例子:

  • X组可以看到phone_1
  • Y组可以看到phone_2
  • 所有群组都可以看到 phone_3

此架构可以更改。

【问题讨论】:

  • programmers.stackexchange.com 将是这个问题的一个更好的论坛。我建议把它移到那里,因为他们倾向于处理这样的设计问题。
  • 这个问题没有任何答案,因为没有 FB 员工会真正说出他们是如何做到的。我们只能猜测他们是如何做到的。

标签: ruby-on-rails database facebook database-design authorization


【解决方案1】:

您必须为 FriendGroup 创建权限表。 因为您必须收集授予每个 FriendGroup 的权限,同时使组或用户可以更改该权限。

权限(permission_id、friend_group、参数、可见)

例子:

  • X组可以看到phone_1
  • Y组可以看到phone_2
  • 所有群组都可以看到 phone_3
(1,x,phone_1,true)
(1,Y,phone_2,true)
(1,x,phone_3,true)
(1,Y,phone_3,true)

您可以通过以下链接了解更多关于 ACL 的信息:

Database model with users, roles and rights

A Role-Based Access Control (RBAC) system for PHP

Patterns for building social network type applications?

【讨论】:

    【解决方案2】:

    我创建了一个名为 Privacy setting 的 gem,它可以帮助将简单的隐私设置集成到 Rails 应用程序中。看看吧:https://github.com/xuanchien/privacy_setting

    【讨论】:

      【解决方案3】:

      您需要一个基于角色的权限管理系统。看看CanCanDeclarativeAuthorization 宝石。

      【讨论】:

        【解决方案4】:

        您可以为所有字段添加列名权限,例如

        phone_number 和 phone_number_permission,photo 和 photo_permission 以及权限列中的使用值 0,1,2,3

        permission rights
        0. Not show to anyone
        1. Show to friends
        2. Show friends of friends
        3. Show to groups and who are your friends
        

        您必须管理此权限才能查看个人资料页面上的数据。

        如果用户 == 朋友和权限 == 1 显示数据

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-06
          • 1970-01-01
          • 2011-11-25
          • 1970-01-01
          • 1970-01-01
          • 2015-02-19
          • 1970-01-01
          相关资源
          最近更新 更多