Private teams are not able to join other teams (public or private)

Bug #405277 reported by Brad Crittenden
24
This bug affects 3 people
Affects Status Importance Assigned to Milestone
Launchpad itself
Fix Released
High
j.c.sackett

Bug Description

Symptoms
========

There is no UI to let a private team be a member of another team. The UI prevents this because the underlying code does not have any rules for determining visibility of private teams other than 'only the members and owner can see the team'.

Analysis
========

Currently private teams have a rule that their existence and identity must not be exposed under any circumstances. This is overly strict: it prevents the team sharing assets with others (e.g. private PPAs), owning assets (e.g. other teams or projects) or participating in larger structures (e.g. consider an internal company structure mapped into launchpad - a ceo team owning department head role teams owning department membership teams and so on).

So there are a number of different situations where we need to allow private teams to interact with other objects.

If we clearly identify actions that will expose the existence of the team, and what data will be exposed, then users can decide for themselves whether they want the benefit of taking the action, or the privacy of not taking it. When a private team is exposed due to its interacting with some other object we should only show enough data to let the system render pages correctly.

That is:
 - name, displayname, branding (so we can show the team)
 - *if the interaction granting visibilty is exposed under the teams url* - url
And on views of the team itself, if they can see its url then we can show them a bare bones page showing only the metadata they are permitted plus the child objects that the user has been granted access to.

For team membership there are two teams involved: the joined(parent) and the joining(child) team.

To allow a private team to join a private team we need to analyse both scenarios.

Private parent teams
====================
In this scenario a private team allows another person to join it. This is implicitly analysed today because we permit users to be in private teams. The rules we chose were:
 - permitting a member into a private team permits full visibility of the team.
 - The teams membership list can be seen, its owner etc.

This doesn't say that all the members will be mutually visible - but it does say that the parent team does not apply its own visibility limits to any of its metadata for any of its members.

Private child teams
===================
In this scenario a private team joins another team. The parent team has three interesting actors associated with it:
 * owner - can modify the parent team but are not part of it.
 * administrator - can modify the parent team and are part of it.
 * member - care part of the team.

In order to administrate the team visibility of every member is required (otherwise members cannot be evicted). Similarly proposed members must be visible. So the owner and administrators must be able to see the name and display name for every member whether they are private or not.

In order to be part of the team no visibility of other members is needed, so none should be granted.

Implementation
==============

This implementation will let private teams be members of public teams and of other private teams.

Add visibility rules for private teams which allow administrators(including owners) of the teams they are in or are proposed for membership in to see their displayname and name. Add a UI to propose a private team for membership in another team which the person doing the proposal can see.

The rules for visibility of a private team is then:
 * You own or are in the team.
 * You own or administer a team that the private team is in
 * You own or administer a team that the private team is has been proposed for membership in (in either direction: the requirement that the proposer have visibility to both teams satisfies this).

Parent case: When accepting a proposed member to a private team, adding a member to a private team, or offering membership in the team to another team/person we need to notify the person doing the acceptance/addition/offer that they are granting full visibility of the private team object (but seeing other members is up to the visibility rules governing those members).

Child case: When putting a private team forward for membership in a team or accepting a 'you have been added to this team' offer on behalf of a private team the person applying for or accepting the offer is notified that their teams name/display/branding will be visible to administrators and owners of the other team.

Caveats
=======

There are other ways we may want to permit widespread visibility of private teams to non-members such as 'everyone in $company should be able to see $company team names', but that is a different project and its implementation would not make the problem of team membership in teams easier or harder because private teams may join cross-organisationally.

Related branches

Revision history for this message
Curtis Hovey (sinzui) wrote :

Hi Brad. Thanks to taking this issue.

I think Public <- Private is [N]. This is a painful rule because it will require some real teams to manage a public and a private launchpad teams so that they can work public and private projects.

I think private team owners will want to add their private team to a public (owner, driver, bug supervisor) team because those roles are needed to do some task. Presumably the admin of the public team is also a member of the private team, but we know the membership can change. Communication within the team will be awkward because a member of a private team is a "double-agent" who must guard everything he says and does to not revel he has a private interest. I think we want to avoid this conflict of interest (as we should have done when mailing lists were added to teams)

The official recipe will require a separate pubic team. I am sure there will be a duplication of membership at first. I believe the public team membership will naturally diverge from the private team because the interests of the two teams are not the same. That is to say, If were were to permit Public <- Private, users will get into trouble when they discover they need to create a separate pubic team to collaborate with other users. Let's avoid the situation.

If this division proves to be awkward, we can look at making team creation and membership management easier.

Changed in launchpad-registry:
assignee: nobody → Brad Crittenden (bac)
importance: Undecided → High
milestone: none → 2.2.8
status: New → Triaged
Curtis Hovey (sinzui)
Changed in launchpad-registry:
milestone: 2.2.8 → 3.0
Curtis Hovey (sinzui)
Changed in launchpad-registry:
status: Triaged → In Progress
Brad Crittenden (bac)
Changed in launchpad-registry:
status: In Progress → Triaged
Curtis Hovey (sinzui)
Changed in launchpad-registry:
milestone: 3.0 → 3.1.10
Curtis Hovey (sinzui)
Changed in launchpad-registry:
importance: High → Low
Curtis Hovey (sinzui)
Changed in launchpad-registry:
milestone: 3.1.10 → none
Curtis Hovey (sinzui)
Changed in launchpad-registry:
assignee: Brad Crittenden (bac) → nobody
Curtis Hovey (sinzui)
tags: added: disclosure
Revision history for this message
Curtis Hovey (sinzui) wrote :

We now know enough information to address this as a part of the Managing Disclosure feature.
Arguments about team visibility and membership were missing the crucial point. The underlying issue is really that open teams cannot be trusted in some directions. We will change the restrictions from visibility to membership policy (bug 662844).

TeamParticipation leaks information. We need to secure it or at least identify all the ways it is unsecure.
Mailing lists and contact-this-tea can also leak information. We might decide that this is not a bug, but a policy decision; no team is truly private when its members can send messages with the team hierarchy.

Curtis Hovey (sinzui)
description: updated
Revision history for this message
Robert Collins (lifeless) wrote :

I'd like to query this bit:
'[N]: Private <- Public'

That seems strange to me; after all a public person can be in a private team. So why can't a public team be in a private team?
Members (including admins) of said public team would gain visibility of the private team (and access to assets it controls) in the same way that a person put into a private team does.
owners of said public team could either gain nothing, or traversal rights to the private team.

Revision history for this message
Curtis Hovey (sinzui) wrote :

I removed '[N]: Private <- Public' Lp does support public teams in private team. There are about 60 in this relationship.

description: updated
description: updated
Revision history for this message
Robert Collins (lifeless) wrote :

Curtis, exploring this a little more.
How is
Private <- Private (private team left has a member private team right)
different to
Public <- Private (public team has a member private team)

In the former case, the private team left may have members / administrators or even the owner that are not in private team right. So from the perspective of private team right those people are the general public.

I think that these two cases are identical.

description: updated
Revision history for this message
Curtis Hovey (sinzui) wrote :

Robert.

When we talked to users they desired that the subteam be completely hidden, but it is revealed by several pages via team participation. There was some discussion of another form of private team that never shows membership to its members. That was a new feature so we did not pursue it.

There is a social aspect that I am inclined to reject. Users can reveal themselves via contact-this-team, mailing lists, uploading to a ppa, etc.

summary: - Allow private teams to join other teams
+ Private teams are not able to join other teams (public or private)
Revision history for this message
Robert Collins (lifeless) wrote :

Curtis and I had a chat about this. I have tried to clarify the description as a result.

description: updated
description: updated
Revision history for this message
Robert Collins (lifeless) wrote :

I'm raising this to high, its a significant wart for private team using organisations.

Changed in launchpad:
importance: Low → High
Curtis Hovey (sinzui)
tags: added: privacy team
Curtis Hovey (sinzui)
tags: added: teams
removed: team
Revision history for this message
Robert Collins (lifeless) wrote :

btw: "I removed '[N]: Private <- Public' Lp does support public teams in private team. There are about 60 in this relationship." -> that means that the public teams must not be open or delegated, I presume :)

j.c.sackett (jcsackett)
Changed in launchpad:
status: Triaged → In Progress
assignee: nobody → j.c.sackett (jcsackett)
Revision history for this message
Launchpad QA Bot (lpqabot) wrote :
tags: added: qa-needstesting
Changed in launchpad:
status: In Progress → Fix Committed
Curtis Hovey (sinzui)
tags: added: qa-ok
removed: qa-needstesting
William Grant (wgrant)
Changed in launchpad:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.