Proper implementation of friend groups: Request for input

In my quest to bring the features of Livejournal (and other proprietary social networks) to the open, public internet, I'm stuck on how to properly implements friend groups. Friend groups determine which users are allowed to see your more sensitive blog entries. I've pulled together a description of several alternative models, and I'd like some input.

Retroactive permissions

Let's say I create a group called "School" and write a post called "My Teachers", with that group allowed to see the post. A year later, I add a user to the group. Should the user have permission to see all previous posts in the "School" group? In other words, are permissions retroactive?

Conversely, if a user is removed from a group, do they lose permission to see posts in that group?

Common elements

The following elements are invariant between models:

  • Each post is associated with one or more groups. (Having multiple groups is optional.)
  • Each user is in one or more groups.
  • Each group contains zero or more users.
  • When a post goes public, the users in the associated groups have permissions to see the post. This may change over time.
  • Ad-hoc, unnamed groups can be created on the fly. (User selects a list of users who have permission to view a post, and that creates a group.)


Here are three variants that I can imagine:

The most obvious model is fully dynamic and retroactive. Groups and users are in a many-to-many relationship, and a user can only see posts that are currently posted in that user's groups.
Another approach is to associate user permissions directly with posts. (Users and posts in a many-to-many relationship.) When I write a post that is available to the "School" group, the members of that group are given explicit permission to see the post. Changes to a group's membership do not affect old groups.
When a user is added to or removed from a group, the app asks if the change should be retroactive. This would require some funky hybrid of the static and dynamic models, perhaps using versioned groups for non-retroactive changes.

Which one?

Which one of these makes the most sense to you? Feel free to propose alternate models as well.

Responses: 6 so far

  1. Elusive says:

    Groups should be implemented statically (retroactive permissions). This is what LJ users are used to, and keeping track of who can read what would be a mess if you keep changing group membership while keeping the same group names. However, I think it would be cool to also have an alternative functionality where in addition to having retroactive groups, you could instead chose to grant permissions on an individual basis (checkboxes for everyone on your "friends/readers" list), so that you can customize posts under extraordinary circumstances (e.g. wanting advice from the Suspect community as to what to give as a birthday present to a specific Suspect). In my vision for this implementation, there would never be a *named* group associated with these posts.

  2. Elusive says:

    [clicks on "walled gardens" link and reads first couple sentences]

    I'll add that I disagree with the idea that Livejournal is a "walled garden," at least the way that author is talking about them. Livejournal is a public blogging site. Non-LJ users can be linked to public LJ posts, and in most cases can comment on them (anonymously). This is emphatically not the case with Facebook and MySpace. With those online communities, you need an account before you can read anyone else's stuff.

  3. Tim McCormack says:

    @Elusive: Ah, good catch on the "walled garden". I agree, it's not as good descriptor of Livejournal as it is of Facebook and MySpace.

  4. Tim McCormack says:

    @Elusive (comment #1): Static and retroactive are antonyms, here. I'll have to play with my LJ accounts to see what the current behavior is, but it sounds like you are saying that permissions are *not* retroactive.

    The other thing you mention, "exceptional groups", could be implemented in any of these models. The choice of model is actually irrelevant! The platform would create an unnamed ad-hoc group and post using that.

  5. Caesura says:

    Retroactive user groups are, as it has been pointed out, the default, but an option to extend group membership to someone on a non-retroactive basis would be cool.

    Though that could get complicated, since the most efficient way of storing the details of the group permission might be to include a beginning and end date for each group membership on a per-friend basis. That would get even uglier if multiple, distinct timeframes were allowed for each membership for each friend (i.e. this person belongs to my Teachers group, but only for the multiple date ranges corresponding to the semesters when I was taking classes with them).

  6. Tim McCormack says:

    I played around with a couple of my accounts, and I can confirm that the behavior of LJ does indeed follow the Dynamic (retroactive) model.

    I'm just not sure it's a good model. :-)