Content
View differences
Updated by Niels Lindenthal over 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-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.
# Solution
## Share modal
* In the toolbar of a work package there is button that open a share modal.
* In the share model it is possible to:
1. Add an existing user (permissions required),
2. Add an existing group (permissions required),
3. Invite a new user (additional permissions and global activation required),
4. Understand the invitation status,
5. Revoke invitations and remove access to the work package,
6. Resend email invitations.
<figure class="image op-uc-figure"><div class="op-uc-figure--content"><img class="op-uc-image" src="/api/v3/attachments/41924/content"></div><figcaption class="op-uc-figure--description">Mockup: Share modal</figcaption></figure>
## Email invite
* Newly invited users receive an email with a access-token that allows the user to create a user account (similar to the existing solution)
* The invited user creates a user account with a 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.
## Access shared work packages in the global work packages module
* The shared work packages are displayed in the global work packages module
* Sharing a work package includes sharing the project's name. This allows the user to see the
* Project column
* Grouping by project
* Filter by project
* It is possible to filter the shared work packages
* Shared with 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 module
* Filter shared work packages by user: is, is not, none, any
* Default filter: Shared with 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 two users
* Indicate with a badge if there are more than 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 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>
# 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/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
#
#
# Visuals
* [Edit mode](https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841)
* [Present mode](https://www.figma.com/proto/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=665%3A42662&scaling=contain&page-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 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.
## 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.
# Solution
## Share modal
* In the toolbar of a work package there is button that open a share modal.
* In the share model it is possible to:
1. Add an existing user (permissions required),
2. Add an existing group (permissions required),
3. Invite a new user (additional permissions and global activation required),
4. Understand the invitation status,
5. Revoke invitations and remove access to the work package,
6. Resend email invitations.
<figure class="image op-uc-figure"><div class="op-uc-figure--content"><img class="op-uc-image" src="/api/v3/attachments/41924/content"></div><figcaption class="op-uc-figure--description">Mockup: Share modal</figcaption></figure>
## Email invite
* Newly invited users receive an email with a access-token that allows the user to create a user account (similar to the existing solution)
* The invited user creates a user account with a 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.
## Access shared work packages in the global work packages module
* The shared work packages are displayed in the global work packages module
* Sharing a work package includes sharing the project's name. This allows the user to see the
* Project column
* Grouping by project
* Filter by project
* It is possible to filter the shared work packages
* Shared with 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 module
* Filter shared work packages by user: is, is not, none, any
* Default filter: Shared with 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 two users
* Indicate with a badge if there are more than 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 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>
# 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/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
#
#
# Visuals
* [Edit mode](https://www.figma.com/file/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=53%3A7841)
* [Present mode](https://www.figma.com/proto/PlN4AmkwHNabNiT1Z7nZAA/Share-Work-Packages?node-id=665%3A42662&scaling=contain&page-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 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.