Content
View differences
Updated by Marc Alcobé over 3 years ago
# User <img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51964/content">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-p op-uc-table--cell op-uc-table--cell_head">Problem: What problem or job does the user have?</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Pain: What is the primary workaround that users perform that we could remove or replace? Why is it painful?</th></tr></thead><tbody><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">Users don't have access to the work packages that they need for the project team to work efficiently.</td><td class="op-uc-p op-uc-table--cell">The communication is done by email or chat. There is no single source of truth anymore.</td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">Users have access to confidential data that they should not know. </td><td class="op-uc-p op-uc-table--cell">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. </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 ## Share modal
* 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.
* **Existing group:** group of users known in the instance with an avatar associated.
* **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 model the user should be able it is possible to:
1. Add an existing user with a specific permission (permissions required),
2. Add an existing group with a specific permission (permissions required),
3. Invite a new user with a specific permission via email address (additional permissions and global activation required),
4. Understand the invitation status status,
5. Modify the permissions related to already invited users
6. Revoke invitations and remove access to the work package package,
7. 6. 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)) invitations.
### <img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51965/content">
## 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)).
* **For new users:**
* Newly invited users receive an email with a access-token that allows the user to create a user account following (similar to the steps specified in [#46285](https://community.openproject.org/work_packages/46285).
existing solution)
* The invited user creates a user account with a password, name and surname. password. 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 ## Access shared 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.
### Global access to * The shared work packages
* Inside of are displayed in 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 Sharing a value of "is" and work package includes sharing the project's name. This allows the user added as to see 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))
Project column
* For users that only have access to single work packages because they are not invited to any Grouping by 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"
Filter by project
* They will have access only It is possible to filter the information related to the shared 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 me: all | none
<figure class="image op-uc-figure"><div class="op-uc-figure--content"><img class="op-uc-image" src="/api/v3/attachments/41926/content"></div><figcaption class="op-uc-figure--description">Mockup: Shared with me</figcaption></figure>
## Filter shared work package in the project work packages that are shard with them.
module
* They will not be able to access the project views, other users, other Filter shared work packages lists or by user: is, is not, none, any other page not related to the work packages shared
* Default filter: Shared with them. user (ID, Type, Subject, Status, Assignee, Shared with user)
### <figure class="image op-uc-figure"><div class="op-uc-figure--content"><img class="op-uc-image" src="/api/v3/attachments/41925/content"></div><figcaption class="op-uc-figure--description">Mockup: Shared with user</figcaption></figure>
## Column "Shared with user"
* Showing the first user that has been shared with two users
* Indicate with a badge if there are more than one user shared two users
* Clicking on the cell opens the share modal
### ## Permissions
* There is an additional setting that activates the sharing with external guest users. So organisations organizations can ensure that only users that are authenticated against the connected identity provider have access to OpenProject.
* Separate permissions for project roles to share work packages with project-external users.
* There are three permission levels to share work packages
* 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-p op-uc-table--cell op-uc-table--cell_head"><br data-cke-filler="true"></th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Edit</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Comment</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">View</th></tr></thead><tbody><tr class="op-uc-table--row"><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Become assignee</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-p op-uc-table--cell op-uc-table--cell_head">Log time</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-p op-uc-table--cell op-uc-table--cell_head">View logged time</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-p op-uc-table--cell op-uc-table--cell_head">View own logged time</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-p op-uc-table--cell op-uc-table--cell_head">See version</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-p op-uc-table--cell op-uc-table--cell_head">Assign versions</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-p op-uc-table--cell op-uc-table--cell_head">Edit work package attributes</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-p op-uc-table--cell op-uc-table--cell_head">Add comment</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-p op-uc-table--cell op-uc-table--cell_head">Edit relations</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-p op-uc-table--cell op-uc-table--cell_head">View attachments</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-p op-uc-table--cell op-uc-table--cell_head">Upload attachments</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-p op-uc-table--cell op-uc-table--cell_head">Manage watchers (add and delete)</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-p op-uc-table--cell op-uc-table--cell_head">Watch work package</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-p op-uc-table--cell op-uc-table--cell_head">View watchers list</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-p op-uc-table--cell op-uc-table--cell_head">Show GitHub content</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-p op-uc-table--cell op-uc-table--cell_head">Export</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-p op-uc-table--cell op-uc-table--cell_head">Change project</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></tbody></table></figure>
# Figma
https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841
# Visuals
<img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51967/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51983/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51971/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51969/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51984/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51972/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51968/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51978/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51973/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51980/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51977/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51987/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51979/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51986/content"><img class="op-uc-image op-uc-image_inline"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51976/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51970/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51991/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51975/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51982/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51981/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51992/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51994/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51995/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51997/content">
# 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 behavior 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
* 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 user is added as member.
* Permission to share? Who is allowed? Different permissions for sharing with group or user
* Any means to see the group's members?
* Are the shared with group members listed individually (same as for project membership)? Any special declaration?
* What if a 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 has had individual permissions and the group's permissions are then revoked?
* Are placeholder users sharable with?
* How does this feature relate to inviting a 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 a user is to be removed from the 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 multiple when invited?
### ## Copying a project
* Are shares copied on copying a project?
### ## Capabilities of shared with user
* 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 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 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 list
* Any means to list those on the my page?
* Screenshot of "Shared with me" in 31150 does not match the filters selected
### ## Notifications
* Should mentioning a shared with user be possible?
* Should such a user be selectable as a watcher? - Yes according to specification
* Filters
* Assumption - notifications are to be sent
* Should it be possible to configure project specific notification settings?
### ## Workflows
* Which workflow applies to a shared with user having the edit permission?
* If shared view/comment/edit is modeled internally as roles, such roles could show up in the workflow administration but UX-wise, this might be improved.
### ## Work package list
* Assumption - showing shared to users in 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 ## Board/Teamplanner
* 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
# Figma
https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841
# User flow
<img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51966/content">
# Visuals
<img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51967/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51983/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51971/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51969/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51984/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51972/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51968/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51978/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51973/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51980/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51977/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51987/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51979/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51986/content"><img class="op-uc-image op-uc-image_inline"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51976/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51970/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51975/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51982/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51981/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51974/content">
# 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 behavior 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.
###
* Project manager
* Team lead
* Project member
* Customer
* Supplier
###
<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-p op-uc-table--cell op-uc-table--cell_head">Problem: What problem or job does the user have?</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Pain: What is the primary workaround that users perform that we could remove or replace? Why is it painful?</th></tr></thead><tbody><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">Users don't have access to the work packages that they need for the project team to work efficiently.</td><td class="op-uc-p op-uc-table--cell">The communication is done by email or chat. There is no single source of truth anymore.</td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">Users have access to confidential data that they should not know. </td><td class="op-uc-p op-uc-table--cell">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. </td></tr></tbody></table></figure>
###
* 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.
* **Existing group:** group of users known in the instance with an avatar associated.
* **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 model the user should be able
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.
* 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))
###
##
* **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)).
* **For new users:**
* Newly invited users receive an email with a access-token that allows the user to create a user account following
### Filter "Share with user"
* In order to filter the
* 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.
### Global access to
* Inside of
* **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))
* Access only to the menu entry "Shared with me"
* Inside of the table view the columns will be:
* ID
* Subject
* Type
* Assignee
* Shared with
* Project
* They should be able to group and filter
<figure class="image op-uc-figure"><div class="op-uc-figure--content"><img class="op-uc-image" src="/api/v3/attachments/41926/content"></div><figcaption class="op-uc-figure--description">Mockup: Shared with me</figcaption></figure>
## Filter shared work package in
* Default filter: Shared
###
##
* 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
###
* There is an additional setting that activates the sharing with external guest users. So organisations
* Separate permissions for project roles to share work packages with project-external users.
* There are three permission levels to share work packages
* 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-p op-uc-table--cell op-uc-table--cell_head"><br data-cke-filler="true"></th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Edit</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Comment</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">View</th></tr></thead><tbody><tr class="op-uc-table--row"><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Become assignee</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-p op-uc-table--cell op-uc-table--cell_head">Log time</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-p op-uc-table--cell op-uc-table--cell_head">View logged time</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-p op-uc-table--cell op-uc-table--cell_head">View own logged time</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-p op-uc-table--cell op-uc-table--cell_head">See version</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-p op-uc-table--cell op-uc-table--cell_head">Assign versions</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-p op-uc-table--cell op-uc-table--cell_head">Edit work package attributes</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-p op-uc-table--cell op-uc-table--cell_head">Add comment</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-p op-uc-table--cell op-uc-table--cell_head">Edit relations</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-p op-uc-table--cell op-uc-table--cell_head">View attachments</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-p op-uc-table--cell op-uc-table--cell_head">Upload attachments</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-p op-uc-table--cell op-uc-table--cell_head">Manage watchers (add and delete)</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-p op-uc-table--cell op-uc-table--cell_head">Watch work package</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-p op-uc-table--cell op-uc-table--cell_head">View watchers list</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-p op-uc-table--cell op-uc-table--cell_head">Show GitHub content</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-p op-uc-table--cell op-uc-table--cell_head">Export</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-p op-uc-table--cell op-uc-table--cell_head">Change project</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></tbody></table></figure>
# Figma
https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841
# Visuals
<img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51967/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51983/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51971/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51969/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51984/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51972/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51968/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51978/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51973/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51980/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51977/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51987/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51979/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51986/content"><img class="op-uc-image op-uc-image_inline"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51976/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51970/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51991/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51975/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51982/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51981/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51992/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51994/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51995/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51997/content">
# 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 behavior 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
###
* 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
* 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 user is added as member.
* Permission to share? Who is allowed? Different permissions for sharing with group or user
* Any means to see the group's members?
* Are the shared with group members listed individually (same as for project membership)? Any special declaration?
* What if a 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 has had individual permissions and the group's permissions are then revoked?
* Are placeholder users sharable with?
* How does this feature relate to inviting a 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 a user is to be removed from the 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 multiple when invited?
###
* Are shares copied on copying a project?
###
* 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 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 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 list
* Any means to list those on the my page?
* Screenshot of "Shared with me" in 31150 does not match the filters selected
###
* Should mentioning a shared with user be possible?
* Should such a user be selectable as a watcher? - Yes according to specification
* Filters
* Assumption - notifications are to be sent
* Should it be possible to configure project specific notification settings?
###
* Which workflow applies to a shared with user having the edit permission?
* If shared view/comment/edit is modeled internally as roles, such roles could show up in the workflow administration but UX-wise, this might be improved.
###
* Assumption - showing shared to users in 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
# Figma
https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841
# User flow
<img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51966/content">
# Visuals
<img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51967/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51983/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51971/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51969/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51984/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51972/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51968/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51978/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51973/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51980/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51977/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51987/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51979/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51986/content"><img class="op-uc-image op-uc-image_inline"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51976/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51970/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51975/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51982/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51981/content"><img class="op-uc-image op-uc-image_inline" src="/api/v3/attachments/51974/content">
# 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 behavior 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.