owncloud / owncloud/ocis

[QA][PM] Definition of the Project Spaces Feature

Open
#4,316 1 comment 3 reactions 0 assignees View on GitHub
Category:Enhancement QA:team Type:Knowledge-Base
Dominant language
Go
Stars
2.1k
Forks
274
Avg merge
2d 1h
Merged PRs (30d)
103

Description

# Description

This is the

1. Product Definition
2. QA Reference

for the Spaces Feature

## What is the Spaces Feature

The spaces feature leverages independent storage units and makes them usable for `personal` and `project` folders

### Properties

| **Name** | **Description** | **Required** |
|:--------|:---------------|:------------:|
| Name | Space Name | ✅ |
| driveType | The type of the space. Currently `personal` or `project` | ✅ |
| driveAlias | The human readable alias for the space. It can be set by a template. Defaults are `personal/username` and `project/name-lowercase-with-dashes` | ✅ |
| id | Unique identifier for a space. Usually a uuidV4. For personal spaces we are using the user UUID | ✅ |
| description | Short description for the Space. Default empty. | |
| owner | The file owner for all files inside the space. On personal spaces the user. On other spaces we have no real owner set. Other spaces have an invalid user type set which cannot log in. This userID is used for public link authentication | ✅ |
| quota | The limitiation for the disk usage. Example `json "quota": {"remaining": 1000000000,"state": "normal","total": 1000000000,"used": 0 },` It is not mandatory. | |
| root | This represents the root folder of a space. | ✅ |
| root.etag | Etag of the root folder. Used by clients. | ✅ |
| root.id | ID of the root folder. Same as the spaceID | ✅ |
| root.WebDavUrl | The WebDAV Endpoint to sync this space. It builds like `/dav/spaces/{spaceID}` | ✅ |
| permissions | This is a list of all users which have access to this space and their roles | ✅ |

## Spaces UI

![1659970453214](https://user-images.githubusercontent.com/4378513/183449049-7e82d728-a0ae-4281-aef6-0586a92be129.png)

## Lifecycle

### Creating a Space

To create a project space, users need to have the permission `CreateSpace`(`ID: 79e13b30-3e22-11eb-bc51-0b9f0bad9a58`). In the default config this permission is assigned to the roles `Admin` and `SpaceAdmin`.

During the creation of a project space, the following actions occur:

- A Storage Space of type `project` is created
- The Creating User is added to the space with the `Manager` Role
- A `.space` folder is created with the content `Readme.md`

### Space Administration

1) Users with the `Manager` Role can add and remove people to/from a space.
2) Users with the global Permission `CanManageAllSpaceMembers` can also manage the space members (PLANNED, NOT IMPLEMENTED)

### Disabling and Deleting a space

1) Users with the `Manager` Role can disable/restore and delete a space (2 steps needed)
2) Users with the global Permission `CanDeleteAllSpaces` and `CanRestoreAllSpaces` can also disable, delete and restore the space (PLANNED, NOT IMPLEMENTED).

#### Consequence of a disabled space

- Nobody can list the contents of the space anymore (`404` Response on the `PROPFIND`)
- The desktop client will delete the contents of that space locally
- The space Image is not shown anymore (CURRENT STATE, CAN BE CHANGED)

### Change Properties of the space

The following properties can be changed:

| **Name** | **Description** | **Space Role** | **Global Permission** |
|:--------|:---------------|:------------:|:------------:|
| quota | The limitation for the disk usage. | --- | `SetSpaceQuota` |
| Name | Space Name | Manager | --- |
| description | Short description for the Space. Default empty. | Manager | --- |
| trashed | The trashed state. | Manager | PLANNED |
| driveAlias | The human readable alias for the space. | Manager, Editor | --- |
| Readme | The human readable alias for the space. | Manager, Editor | --- |
| Image | The human readable alias for the space. | Manager, Editor | --- |

### Listing Spaces

#### All My Spaces

The normal user wants to list all spaces where he is a regular member of. The API provides an endpoint for this (`me/drives`) which supports filtering (type, owner, ID) and sorting (name, lastModifiedDateTime).

#### All Available spaces

The admin user with the global permission wants to list all available spaces. The API provides an endpoint for this (`/drives`) which supports filtering (type, owner, ID) and sorting (name, lastModifiedDateTime).

The admin user **CAN NOT** list the content of spaces where he is no regular member of. This is an important design principle.

The admin user should be able to manage spaces where he is not a regular member of.

1) The control over the available disk space is a primary admin task. This is reflected in the ability to set a Quota on all available spaces.
2) The admin user could be needed to help out when something goes wrong. Therefore he needs to be able to deactivate, delete and restore all available spaces and manage their members.

## Shares and Membership

All Space members should see all collaborators in a project space. Project spaces are long-term collaboration areas. They should be completely transparent.

![1659972930859](https://user-images.githubusercontent.com/4378513/183456548-aff899e7-41e0-4d4c-bd71-4683a06d04e2.png)

All members with the role `Manager` should be able to share sub items of a space via:

1. Links with anonymous access
2. User Shares
3. Group Shares

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.