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: class="op-uc-p op-uc-table--cell op-uc-table--cell_head">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: 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?</p></th></tr></thead><tbody><tr painful?</th></tr></thead><tbody><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Users 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.</p></td><td class="op-uc-table--cell"><p class="op-uc-p">The 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.</p></td></tr><tr anymore.</td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Users class="op-uc-p op-uc-table--cell">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 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. </p></td></tr></tbody></table></figure> 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
* 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 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))
### 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 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.
### 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.
### 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
### 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 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-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-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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Become assignee</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Log time</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">View class="op-uc-p op-uc-table--cell op-uc-table--cell_head">View logged time</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">View class="op-uc-p op-uc-table--cell op-uc-table--cell_head">View own logged time</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">See version</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Assign versions</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Edit class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Edit work package attributes</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Add comment</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Edit relations</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">View attachments</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Upload attachments</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Manage class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Manage watchers (add and delete)</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Watch class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Watch work package</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">View class="op-uc-p op-uc-table--cell op-uc-table--cell_head">View watchers list</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Show class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Show GitHub content</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Export</p></th><td 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-table--cell op-uc-table--cell_head"><p class="op-uc-p">Change project</p></th><td 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>
# Visuals available in Figma
https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841
# Visuals
<img class="op-uc-image op-uc-image_inline"> 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 behaviour 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
* 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:
### 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.
* **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 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))
### 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 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.
### 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.
### 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
### 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 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-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
# Visuals available in Figma
https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841
# 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
* 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
* 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