Skip to content

Quota management for user-created team folders #4975

Description

@jospoortvliet

How to use GitHub

  • Please use the 👍 reaction to show that you are interested into the same feature.
  • Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
  • Subscribe to receive notifications on status change and new comments.

Is your feature request related to a problem? Please describe.
We are looking to make it possible to allow non-admin users to create team folders.

In both cases, administrators need to have a degree of control as quota could be used up quickly. The typical use case is a large organization on a paid SaaS instance where there is a cost-per-gigabyte. Admins would want to assign quota's to departments, and let them figure out what to do in the department.

The easiest way to manage this for admins would be through groups. These can be managed in the IDP (like LDAP or MS Entra) in their daily workflows. Here is a proposal.

Team folders / Group folders proposal

We separate team- and groupfolders again.

  • group folders:
    1. admin created and managed from the current user interface
    2. can be assigned to groups and / or individuals
    3. to maintain backward compatibility: also to teams
  • team folders
    4. automatically provisioned, managed from the new Teams admin UI
    5. Always 1:1 with a team
    6. every Teams UI created team gets a Teamfolder

We would still allow teams without a team folder to be created from apps like Collectives, but not from the Teams UI.

We should make sure that apps that create a Teamfolder always have to pick a group, to avoid a storage quota problem.

Storage handling

Principle

We have a default max quota that can be based on group membership; and a total limit of the storage for all team folders in a certain group, acting as a shared storage pool.

The first is just relevant at creation and basically introduces rate limiting while allowing over-provisioning. The second is the actual, real-time quota check.

Admin options

The admin can configure the group quotas in the admin section of the Teams app, in a table:

group default quota total storage
marketing 2gb 1tb
sales 10gb 500gb
engineering 5gb 2tb

The total storage controls the pool for the group. It is real-time. The default quota is the max quota on individual Teamfolder.

Of course you want managers to have a higher default quota... We allow being in more than one group:

group default quota total storage
marketing 2gb 1tb
sales 10gb 500gb
engineering 5gb 2tb
team leads 20gb -
VP 10 gb 1tb

The logic for the default quota picks the highest number, allowing the admin to reduce the 'rate limiting' on specific people.

If you are in multiple groups, as said at the start, you can pick the group the team belongs to. That allows also control over total storage.

Managing quota

  1. Admins can see all team folders and increase quota. Total storage pool is managed at group level.
  2. A teamfolder can be moved to a different group by an admin.
  3. When the team folder hits a quota limit, the team managers can request more.
  4. When a group hits 90% usage of total quota, we should warn admins. All teams that belong to that group will all stop accepting new files at 100%... This isn't really something for one team (manager) to handle or request.
  5. If no groups have quota or total storage assigned, your team folder can be whatever quota you want. This is simple and does not require any setup for private users and small organizations that don't really need to care.
  6. 5 means - if a team has no group assigned, it has unlimited quota. So remove a group from the system means all its teams get unlimited quota -> see 2: reassign the teams to another group. We should order team folders by group, so these are easy to spot.
  7. The team page should show, at least to team managers, their quota and their pool usage.
  8. If for some reason a team folder has exceeded quota, you can't upload anything anymore. I think that's how we do it now, too, just wanted to be explicit.

Metadata

Metadata

Assignees

No one assigned

    Projects

    Status
    To triage
    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions