Content
View differences
Updated by Marc Alcobé almost 3 years ago
# User problem
### User
* Project manager
* Team lead
* Project member
* Customer
* Supplier
### User problem and their pain
<figure class="table op-uc-figure_align-center op-uc-figure"><table class="op-uc-table"><thead class="op-uc-table--head"><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Problem: What problem or job does the user have?</p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Pain: What is the primary workaround that users perform that we could remove or replace? Why is it painful?</p></th></tr></thead><tbody><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Users don't have access to the work packages that they need for the project team to work efficiently.</p></td><td class="op-uc-table--cell"><p class="op-uc-p">The communication is done by email or chat. There is no single source of truth anymore.</p></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Users have access to confidential data that they should not know. </p></td><td class="op-uc-table--cell"><p class="op-uc-p">Adding too many users to a project violates the need-to-know-principle. People then don't put relevant information into the work packages because they are afraid this might leak to the wrong users. </p></td></tr></tbody></table></figure>
### Impact
* It removes the need to duplicate information. It increases transparency and avoids extra effort and chaos.
# User flow
This user flow is available in the [Figma file](https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841) where the linked mockups are also clickable.
<img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51966/content">
# Solution and acceptance criteria
### Entry points
* In the toolbar of a work package full screen there is button that open a share modal. (Visual: [_0\_0\_00 - Full screen - Share button_](https://community.openproject.org/api/v3/attachments/51967/content)).
* This can also be triggered using the share button in the action bar of the work package split screen view (Visual: [_1\_0\_00 - Split\_screen - Share button_](https://community.openproject.org/api/v3/attachments/51971/content)).
* There is a possibility that the user doesn't have permissions to share this work package. If that's the case an error toast will appear on top of the screen when the entry point button is clicked. (Visual: [_0\_1\_00 - Full\_screen - No share permissions_](https://community.openproject.org/api/v3/attachments/51983/content)).
### Share modal
* The action opens a modal in the center of the screen with the following information:
* **Modal title:** "\[Share icon\] + Share + \[Work package type\] + \[#ID\]".
* **User search area:** Search field (for users and emails) with the default text _"Name, group or email address"_ + Permissions dropdown with _"View"_ by default + Add button (this button performs the call to the backend therefore there is no confirmation action on the modal action bar)
* **Users list:** list of users that the work package is shared with in the format "\[Avatar\] + Name or email". There is multiple possibilities here:
* **Existing user (not in the project):** user known by the instance with an avatar associated but not inside the project and therefore doesn't have a project role associated.
* **Existing user (in the project):** user known in the instance with an avatar associated that is already member of the project where this work package resides. The project role overrides the share permissions and is shown next to the name.
* **Locked user:** the user will be displayed with a lock icon instead of an avatar. _(to be designed)_
* **Existing group:** group of users known in the instance with an avatar associated. The users of this group are not individually added or displayed in the list.
* **New user (email address):** user not known by the instance and shared via the email address that displayed in the list. In case the user hasn't accepted the invitation email there is a "Resend invitation" link next to the email address. As the user is external a "email" avatar is displayed
* **Action bar:** The modal action bar containing a single button to "Close" the modal.
* In the share modal model the user should be able to:
1. Add an existing user with a specific permission
2. Add an existing group with a specific permission
3. Invite a new user with a specific permission via email address
4. Understand the invitation status
5. Modify the permissions related to already invited users
6. Revoke invitations and remove access to the work package
7. Resend email invitations for users who hasn't accepted yet the invitation
* The modal UI cases are specified in the visuals and the user flow have mockups linked in the [Figma file](https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841) (General visual: [_2\_4\_00 - Share modal - With all cases_](https://community.openproject.org/api/v3/attachments/51991/content)).
* If the user tries to share the work package with a user that has been already shared with:
* Already shared with a existing user or group (Visual: [2\_2\_03 - Share modal - User error](https://community.openproject.org/api/v3/attachments/51976/content))
* Already shared with a new user via email address (Visual: [2\_1\_04 - Share modal - Email sharing error](https://community.openproject.org/api/v3/attachments/51987/content))
* If a **New user** or a **Existing user (not in the project)** is added afterwards to the project as member their status in all the shared work packages will be updated with their role in the project.
* If the work package is shared with an **Existing user** who is inside of a **Group** already in the list of shared users, the individual permissions set will always override the group permissions.
* Placeholder users are not selectable for sharing work packages.
### Invite Email/Notification Email invite
* **For existing users:**
* An email is sent to the user (sing their email address) that has been invited to the work package with the information of who has shared the work package with him/her/they, which is the role and permissions that they have and the basic information of the work package (Visual: [_3\_1\_00 - Shared user - Existing user_](https://community.openproject.org/api/v3/attachments/51982/content)).
* In case the invitation is to a group, all group members will receive an email with the information saying that that they have been invited as part of a group (Visual: [_3\_2\_00 - Shared user - Group_](https://community.openproject.org/api/v3/attachments/51981/content)).
* In addition to the email, the user will receive a notification in their notification centre for each work package they have been added to. _(to be designed)_
* **For new users:**
* Newly invited users receive an email with a access-token that allows the user to create a user account following the steps specified in [#46285](https://community.openproject.org/work_packages/46285).
* The invited user creates a user account with a password, name and surname. This allows the user to access all work packages that are shared with this user. It also allows the user to change its notification settings.
### Filter "Share with user"
* In order to filter the work packages inside and outside of a specific project depending on their share status a new filter type should be created (Visual: [4\_0\_00 - Shared with users filter](https://community.openproject.org/api/v3/attachments/51992/content)).
* This filter is part of the common filters and has the name "Share with user". This will contain four different options:
* Is
* Is not
* Any
* None
* This filter will be added as a default view in the global work packages module (outside of any project). This case is specified bellow.
### Trigger notifications
* Shared users as they have a linked account can be mentioned and added as watchers.
* Shared users should be able to receive relevant notifications in their notification centre when mentioned or there is changes in work packages they are watching.
### Global access to shared work packages
* Inside of the global work packages module (outside of any project) there is two new menu entries:
* **Shared with me:** A default view with the filter "Shared with" with a value of "is" and the user added as the unique filter value. (Visual: [_5\_1\_00 - Shared with me_](https://community.openproject.org/api/v3/attachments/51995/content))
* **Shared with users:** A default view with the filter "Shared with" in the value "any". (Visual: [_5\_1\_01 - Shared with users_](https://community.openproject.org/api/v3/attachments/51997/content))
* For users that only have access to single work packages because they are not invited to any project in the instance the view in the global work packages module will be limited to (Visual: [_5\_0\_00 - Shared with me - New user_](https://community.openproject.org/api/v3/attachments/51994/content)):
* Access only to the menu entry "Shared with me"
* They will have access only to the information related to the work packages they have been invited to.
* Inside of the table view the columns will be:
* ID
* Subject
* Type
* Assignee
* Shared with
* Project
* They should be able to group and filter the work packages that are shard with them.
* They will not be able to access the project views, other users, other work packages lists or any other page not related to the work packages shared with them.
* The shared users will be able to see the name of the project of the work packages shared. In case this are inside of a sub-project, they can see the complete hierarchy of parent project and sub-project.
### Work package table column Column "Shared with user"
* Showing the first user that has been shared with
* Indicate with a badge if there are more than one user shared
* Clicking on the cell opens the share modal
* No sorting or grouping for this column
### Members administration page
* When a user is fully removed from an instance, in the confirmation modal should include the information that all work packages shares will be also eliminated.
### Copying a project
* Copying a project will copy the shares of its work packages.
### Permissions
* There is an additional setting that activates the sharing with external guest users. So organisations can ensure that only users that are authenticated against the connected identity provider have access to OpenProject.
* Separate permissions are required for project roles to share work packages for both internal (**Existing user** or **Groups**) with project-external users (**New user**). users.
* There are three permission levels to share work packages with **New user, Groups** or **Existing users (not in the project)**
* Edit
* Comment
* View
<figure class="table op-uc-figure_align-center op-uc-figure"><table class="op-uc-table"><thead class="op-uc-table--head"><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p"><br data-cke-filler="true"></p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Edit</p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Comment</p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View</p></th></tr></thead><tbody><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Become assignee</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Log time</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View logged time</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View own logged time</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">See version</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Assign versions</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Edit work package attributes</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Add comment</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Edit relations</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View attachments</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Upload attachments</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Nextcloud links (if the user has NC account)</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Manage watchers (add and delete)</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Watch work package</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View watchers list</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Show GitHub content</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Export</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Change project</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">See costs and budgets</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Copy work package</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td></tr></tbody></table></figure> class="todo-list__label__description"> </span></label></li></ul></td></tr></tbody></table></figure>
# Visuals available in Figma
https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841
#### NOTE: Non of the current UI is using Primer components. The designs are not definitive and need to be updated!
#### <img class="op-uc-image op-uc-image_inline">
# Out of scope
* Share work packages with other projects
* Private comments
* Additional permissions for work package attributes and custom fields
* Sharing work packages with the project hierarchy (e.g. milestones that are shared with sub-projects)
* Change of the auto completer for users
* Change of the behaviour of filter option and values. Currently the available filters and their values are determined by the project filtered in. This is an limitation that already exists for sub-projects or included projects.
* Access tokens for individual work packages so users don't need to create a user account.
# Open topics
### Shared user management
* What about locked users a work package is shared with:
* Will they show up in the modal or should they be hidden?
* Niels: shown in the modal - otherwise it is unclear to the inviting user
* Boards: Not possible Can users that are members of the project be selected to have work packages shared with them?
* Only those that previously could not see/edit it? ("project role: reader" in the screenshot)
* Niels: I would rather say no. However we need to discuss what happens to the sharing if a column user is added as member.
* Permission to share? Who is allowed? Different permissions for shared sharing with group or user on assignee board
* Team planner: Not possible Any means to have see the group's members?
* Are the shared with group members listed individually (same as for project membership)? Any special declaration?
* What if a row for work package is shared with a group - which in effect shares with many users? Can those users still be added individually? With different permissions? With fewer permissions? What if the user on team planner
# Open topics
### Naming
has had individual permissions and the group's permissions are then revoked?
* Is share Are placeholder users sharable with?
* How does this feature relate to inviting a good naming for this user to a project? The concepts are similar but the UX is devised way different?
* Principal-type selection first
* Invitation message
* Multistep/Wizard modal
* What about the member administration page? Any reference to be added to shared work packages?
* i.E. if users can access a user is to be removed from the work package without creating an account? Should we maybe use something like "Invite" project it might be helpful to at least ask whether all shares should also be removed
* Is some notification to be sent to the shared to users?
* One message or "Manage access"? multiple when invited?
### Copying a project
* Are shares copied on copying a project?
### Capabilities of shared with user
* Confirm Which part and associated objects is a user allowed to see/edit?
* Version
* Budget
* Costs
* Time
* Permissions:
* become assignee
* Log time - should there be an hourly rate attachable to this?
* What about parent/child manipulation
* Attachment deletion? If wrongfully uploaded?
* Removal/Edit of own comment?
* What about nextcloud?
* Permissions on nextcloud side are unclear to me but I'd guess that shared users shouldn't wps should be linkable to
* Copying a shared work package?
* Bulk edit? - context menu
* Log unit costs?
* See costs?
* See budget?
* For the user shared with
* In effect will need to be able to see Costs or Budgets
### Column in the project (at least the name), e.g.
* for filtering
* displaying the name
* Assumption - shared work packages of subprojects will show up in parent work package table list
* Any means to list those on the my page?
* Screenshot of "Shared with me" in 31150 does not match the filters selected
### Notifications
* Is it Should mentioning a business requirement shared with user be possible?
* Should such a user be selectable as a watcher? - Yes according to have this column? Will specification
* Filters
* Assumption - notifications are to be sent
* Should it be really used?
possible to configure project specific notification settings?
### Work package list
* Assumption - showing shared to users in table list is used sporadically
* Apply pattern used for related work packages to not decrease performance on all work package list requests
* Requires endpoint to get all shares based on filter
* The screenshot shows the ability to
* sort by shared: what is the sort criteria if there are multiple users?
* group by shared: what to group by if there are multiple users?
### Board/Team planner
* Assumption/Consequence - Not possible to have a column for shared with user on assignee board
* Assumption/Consequence - Not possible to have a row for shared with user on team planner
### User
* Project manager
* Team lead
* Project member
* Customer
* Supplier
### User problem and their pain
<figure class="table op-uc-figure_align-center op-uc-figure"><table class="op-uc-table"><thead class="op-uc-table--head"><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Problem: What problem or job does the user have?</p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Pain: What is the primary workaround that users perform that we could remove or replace? Why is it painful?</p></th></tr></thead><tbody><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Users don't have access to the work packages that they need for the project team to work efficiently.</p></td><td class="op-uc-table--cell"><p class="op-uc-p">The communication is done by email or chat. There is no single source of truth anymore.</p></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Users have access to confidential data that they should not know. </p></td><td class="op-uc-table--cell"><p class="op-uc-p">Adding too many users to a project violates the need-to-know-principle. People then don't put relevant information into the work packages because they are afraid this might leak to the wrong users. </p></td></tr></tbody></table></figure>
### Impact
* It removes the need to duplicate information. It increases transparency and avoids extra effort and chaos.
# User flow
This user flow is available in the [Figma file](https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841) where the linked mockups are also clickable.
<img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51966/content">
# Solution and acceptance criteria
### Entry points
* In the toolbar of a work package full screen there is button that open a share modal. (Visual: [_0\_0\_00 - Full screen - Share button_](https://community.openproject.org/api/v3/attachments/51967/content)).
* This can also be triggered using the share button in the action bar of the work package split screen view (Visual: [_1\_0\_00 - Split\_screen - Share button_](https://community.openproject.org/api/v3/attachments/51971/content)).
* There is a possibility that the user doesn't have permissions to share this work package. If that's the case an error toast will appear on top of the screen when the entry point button is clicked. (Visual: [_0\_1\_00 - Full\_screen - No share permissions_](https://community.openproject.org/api/v3/attachments/51983/content)).
### Share modal
* The action opens a modal in the center of the screen with the following information:
* **Modal title:** "\[Share icon\] + Share + \[Work package type\] + \[#ID\]".
* **User search area:** Search field (for users and emails) with the default text _"Name, group or email address"_ + Permissions dropdown with _"View"_ by default + Add button (this button performs the call to the backend therefore there is no confirmation action on the modal action bar)
* **Users list:** list of users that the work package is shared with in the format "\[Avatar\] + Name or email". There is multiple possibilities here:
* **Existing user (not in the project):** user known by the instance with an avatar associated but not inside the project and therefore doesn't have a project role associated.
* **Existing user (in the project):** user known in the instance with an avatar associated that is already member of the project where this work package resides. The project role overrides the share permissions and is shown next to the name.
* **Locked user:** the user will be displayed with a lock icon instead of an avatar. _(to be designed)_
* **Existing group:** group of users known in the instance with an avatar associated. The users of this group are not individually added or displayed in the list.
* **New user (email address):** user not known by the instance and shared via the email address that displayed in the list. In case the user hasn't accepted the invitation email there is a "Resend invitation" link next to the email address. As the user is external a "email" avatar is displayed
* **Action bar:** The modal action bar containing a single button to "Close" the modal.
* In the share modal
1. Add an existing user with a specific permission
2. Add an existing group with a specific permission
3. Invite a new user with a specific permission via email address
4. Understand the invitation status
5. Modify the permissions related to already invited users
6. Revoke invitations and remove access to the work package
7. Resend email invitations for users who hasn't accepted yet the invitation
* The modal UI cases are specified in the visuals and the user flow have mockups linked in the [Figma file](https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841) (General visual: [_2\_4\_00 - Share modal - With all cases_](https://community.openproject.org/api/v3/attachments/51991/content)).
* If the user tries to share the work package with a user that has been already shared with:
* Already shared with a existing user or group (Visual: [2\_2\_03 - Share modal - User error](https://community.openproject.org/api/v3/attachments/51976/content))
* Already shared with a new user via email address (Visual: [2\_1\_04 - Share modal - Email sharing error](https://community.openproject.org/api/v3/attachments/51987/content))
* If a **New user** or a **Existing user (not in the project)** is added afterwards to the project as member their status in all the shared work packages will be updated with their role in the project.
* If the work package is shared with an **Existing user** who is inside of a **Group** already in the list of shared users, the individual permissions set will always override the group permissions.
* Placeholder users are not selectable for sharing work packages.
### Invite Email/Notification
* **For existing users:**
* An email is sent to the user (sing their email address) that has been invited to the work package with the information of who has shared the work package with him/her/they, which is the role and permissions that they have and the basic information of the work package (Visual: [_3\_1\_00 - Shared user - Existing user_](https://community.openproject.org/api/v3/attachments/51982/content)).
* In case the invitation is to a group, all group members will receive an email with the information saying that that they have been invited as part of a group (Visual: [_3\_2\_00 - Shared user - Group_](https://community.openproject.org/api/v3/attachments/51981/content)).
* In addition to the email, the user will receive a notification in their notification centre for each work package they have been added to. _(to be designed)_
* **For new users:**
* Newly invited users receive an email with a access-token that allows the user to create a user account following the steps specified in [#46285](https://community.openproject.org/work_packages/46285).
* The invited user creates a user account with a password, name and surname. This allows the user to access all work packages that are shared with this user. It also allows the user to change its notification settings.
### Filter "Share with user"
* In order to filter the work packages inside and outside of a specific project depending on their share status a new filter type should be created (Visual: [4\_0\_00 - Shared with users filter](https://community.openproject.org/api/v3/attachments/51992/content)).
* This filter is part of the common filters and has the name "Share with user". This will contain four different options:
* Is
* Is not
* Any
* None
* This filter will be added as a default view in the global work packages module (outside of any project). This case is specified bellow.
### Trigger notifications
* Shared users as they have a linked account can be mentioned and added as watchers.
* Shared users should be able to receive relevant notifications in their notification centre when mentioned or there is changes in work packages they are watching.
### Global access to shared work packages
* Inside of the global work packages module (outside of any project) there is two new menu entries:
* **Shared with me:** A default view with the filter "Shared with" with a value of "is" and the user added as the unique filter value. (Visual: [_5\_1\_00 - Shared with me_](https://community.openproject.org/api/v3/attachments/51995/content))
* **Shared with users:** A default view with the filter "Shared with" in the value "any". (Visual: [_5\_1\_01 - Shared with users_](https://community.openproject.org/api/v3/attachments/51997/content))
* For users that only have access to single work packages because they are not invited to any project in the instance the view in the global work packages module will be limited to (Visual: [_5\_0\_00 - Shared with me - New user_](https://community.openproject.org/api/v3/attachments/51994/content)):
* Access only to the menu entry "Shared with me"
* They will have access only to the information related to the work packages they have been invited to.
* Inside of the table view the columns will be:
* ID
* Subject
* Type
* Assignee
* Shared with
* Project
* They should be able to group and filter the work packages that are shard with them.
* They will not be able to access the project views, other users, other work packages lists or any other page not related to the work packages shared with them.
* The shared users will be able to see the name of the project of the work packages shared. In case this are inside of a sub-project, they can see the complete hierarchy of parent project and sub-project.
### Work package table column
* Showing the first user that has been shared with
* Indicate with a badge if there are more than one user shared
* Clicking on the cell opens the share modal
* No sorting or grouping for this column
### Members administration page
* When a user is fully removed from an instance, in the confirmation modal should include the information that all work packages shares will be also eliminated.
### Copying a project
* Copying a project will copy the shares of its work packages.
### Permissions
* There is an additional setting that activates the sharing with external guest users. So organisations can ensure that only users that are authenticated against the connected identity provider have access to OpenProject.
* Separate permissions are required for project roles to share work packages for both internal (**Existing user** or **Groups**) with project-external users (**New user**).
* There are three permission levels to share work packages with **New user, Groups** or **Existing users (not in the project)**
* Edit
* Comment
* View
<figure class="table op-uc-figure_align-center op-uc-figure"><table class="op-uc-table"><thead class="op-uc-table--head"><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p"><br data-cke-filler="true"></p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Edit</p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Comment</p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View</p></th></tr></thead><tbody><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Become assignee</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Log time</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View logged time</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View own logged time</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">See version</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Assign versions</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Edit work package attributes</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Add comment</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Edit relations</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View attachments</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Upload attachments</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Nextcloud links (if the user has NC account)</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Manage watchers (add and delete)</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Watch work package</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">View watchers list</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Show GitHub content</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Export</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Change project</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">See costs and budgets</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Copy work package</p></th><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled" checked="checked"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description"></span></label></li></ul></td></tr></tbody></table></figure>
# Visuals available in Figma
https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841
#### NOTE: Non of the current UI is using Primer components. The designs are not definitive and need to be updated!
#### <img class="op-uc-image op-uc-image_inline">
# Out of scope
* Share work packages with other projects
* Private comments
* Additional permissions for work package attributes and custom fields
* Sharing work packages with the project hierarchy (e.g. milestones that are shared with sub-projects)
* Change of the auto completer for users
* Change of the behaviour of filter option and values. Currently the available filters and their values are determined by the project filtered in. This is an limitation that already exists for sub-projects or included projects.
* Access tokens for individual work packages so users don't need to create a user account.
# Open topics
### Shared user management
* What about locked users a work package is shared with:
* Will they show up in the modal or should they be hidden?
* Niels: shown in the modal - otherwise it is unclear to the inviting user
* Boards: Not possible
* Only those that previously could not see/edit it? ("project role: reader" in the screenshot)
* Niels: I would rather say no. However we need to discuss what happens to the sharing if
* Permission to share? Who is allowed? Different permissions
* Team planner: Not possible
* Are the shared with group members listed individually (same as for project membership)? Any special declaration?
* What if
# Open topics
### Naming
* How does this feature relate to inviting
* Principal-type selection first
* Invitation message
* Multistep/Wizard modal
* What about the member administration page? Any reference to be added to shared work packages?
* i.E.
* Is some notification to be sent to the shared to users?
* One message
###
* Are shares copied on copying a project?
###
* Confirm
* Version
* Budget
* Costs
* Time
* Permissions:
* become assignee
* Log time - should there be an hourly rate attachable to this?
* What about parent/child manipulation
* Attachment deletion? If wrongfully uploaded?
* Removal/Edit of own comment?
* What about nextcloud?
* Permissions on nextcloud side are unclear to me but I'd guess
* Copying a shared work package?
* Bulk edit? - context menu
* Log unit costs?
* See costs?
* See budget?
* For the user shared with
* In effect will need to be
### Column in the
* for filtering
* displaying the name
* Assumption - shared
* Any means to list those on the my page?
* Screenshot of "Shared with me" in 31150 does not match the filters selected
* Should such a user be selectable as a watcher? - Yes according
* Filters
* Assumption - notifications are to be sent
* Should
### Work package list
* Apply pattern used for related work packages to not decrease performance on all work package list requests
* Requires endpoint to get all shares based on filter
* The screenshot shows the ability to
* sort by shared: what is the sort criteria if there are multiple users?
* group by shared: what to group by if there are multiple users?
### Board/Team planner
* Assumption/Consequence - Not possible to have a column for shared with user on assignee board
* Assumption/Consequence - Not possible to have a row for shared with user on team planner