Project

General

Profile

Actions

Idea #15372

open

Revise group permissions to separate them from permissions on managed objects

Added by Ward Vandewege almost 5 years ago. Updated about 2 months ago.

Status:
New
Priority:
Normal
Assigned To:
-
Category:
-
Target version:
Story points:
5.0
Release:
Release relationship:
Auto

Description

From a customer:

When I share a project with a user and give her manage permissions she can see the sharing page in wb2 and open the sharing dialog in wb2 ... when i change this to write she cannot see and change the sharing anymore but still read and write within the project. I think this is the behavior which was expected in our current release.

Now I remove her as user, add a group where she is member of, and give it write permissions. She cannot see and change the sharing but can read and write within the project ... expected behavior ... when changing the permissions to manage, however nothing changes .... she still cannot see and change the sharing but read and write within the project. My expectation was that giving manage permission to a user directly or to a group with this user as member does not make any difference.

This behavior is apparently working as designed, but is inconsistent with user expectations. Part of the existing behavior may be due to implementation details where projects are a form of group, but that isn't something that users are (or should be) aware of.

Here's a sketch of how I think the model should work:

  • Groups have the following types of relationships:
    • Viewer - users who have permission to see that the group exists and know its name, but not its membership. It's arguably desirable that they be able to see the owner or some other point of contact, but I think a blinded "contact the owner" or "request membership" feature might be a better way to connect people.
    • Viewer+ - users who can see the members (and, separately, administrators?) of a group. We may be able to bundle this with Viewer to simplify the model.
    • Administrator - users who can edit add/remove group members, change the group name or description. Administrators aren't granted access to the objects shared with the group unless they are also a member (and they can, of course, trivially add themselves, but that creates an audit trail)
    • Member - users who belong to the group and are granted the same permissions that the group has. Perhaps in the future this could be extended to groups as well so that you could have nested groups. Members can't necessarily see the membership list, but they can see the name of the group. Group membership does not convey any privileges on the group itself other than being able to see its name.
    • Shared objects - objects which are shared with the group members on either a read-only, read/write, or manage basis. All group members have the same access to the object and it's children ie access privileges are not tailored on a member by member basis.
  • Special cases:
    • "all users" group - users will be able to see the name of the group by virtue of their membership in it, but won't be able to see the full list unless they also have Viewer+ privileges
    • groups which are secret from their members (ie the admin's "Losers" group) - this model doesn't currently support this, but could be modified by removing member's default access to the names of projects that they are members of and granting this separately (one mechanism would be to share the group with itself, granting that access to its members)

Implementation (taken from #note-19, and updated)

Mnemonic tail_uuid type head_uuid type detail current future
object viewer user or role not a group/role/project target is readable can_read can_read
object collaborator user or role not a group/role/project target is writable can_write can_write
object manager user or role not a group/role/project can add/remove sharing links with same head_uuid can_manage can_manage
(Project) viewer user or role project project+children+grandchildren are readable can_read can_read
(Project) collaborator user or role project project+children+grandchildren are writable can_write can_write
(Project) manager user or role project can add/remove sharing links with project/children/grandchildren as head_uuid can_manage can_manage
(User) viewer user or role user user is readable can_read can_read
(User) collaborator user or role user user is writable can_write can_write
(User) manager user or role user can add/remove sharing links with same head_uuid can_manage can_manage
Viewer user or role role role is readable (n/a) can_read
Viewer+ user or role role role membership list is readable (implies viewer) (n/a) can_list_members
Writer user or role role role is writable (e.g., user can rename the target role) (n/a) can_write
Member user or role role permissions on other objects via role (implies viewer, but not viewer+) (n/a) can_use_permissions
Member+ user or role role permissions on other objects via role (implies viewer+) (n/a) can_use_permissions + can_list_members
Administrator user or role role can add/remove members and viewers (implies member+) can_manage→, ←can_read can_use_permissions + can_manage
Administrator- user or role role can add/remove members and viewers (without implying member) (n/a) can_manage
Notes
  • A "role" group's UUID cannot be used as an owner_uuid (IOW a non-project group can't have children)
  • A "project" group's UUID cannot be used as the tail_uuid of a permission link
  • A user UUID can be a target of a can_use_permission link -- this allows access to all of the user's permissions and home project tree
  • A group cannot have a group_class other than "role" or "project" (and group_class cannot be null)
  • A group can have a can_use_permissions link to another group; this graph is (still) traversed, so groups can be composed
  • A can_list_members link permits its subject (tail_uuid) to read all can_use_permissions links from other users/groups to the same head_uuid, as well as the member users/groups themselves
  • can_manage implies can_list_members
Migration/implementation
  • Obviously, update the materialized view of permissions and the "readable_by" query
  • Clients that (might) need to be updated: Workbench1, Workbench2, group-sync, login-sync, arv-mount (probably drop Workbench1's group admin feature entirely rather than update it)
  • Existing "Administrator" permissions convert to "Member+"
  • Existing group→user links (e.g., "all users" links) convert to "Member"
  • Existing project-sharing links (including read-only sharing, and sharing with role groups) can be left alone
  • Warn/error if a non-project group is used as any object's owner_uuid, or a project group is used as a permission link's tail_uuid
  • Update use of "all users" links in user activation code

Subtasks 2 (2 open0 closed)

Task #15392: ReviewNewActions
Task #15731: [Workbench] Remove legacy group mechanismNewActions

Related issues

Related to Arvados - Idea #15730: [Workbench 2] Implement UI for new group permission schemeNewActions
Related to Arvados - Idea #15732: Update group sync tool for new group permission schemeNewActions
Related to Arvados - Feature #16571: Permission system supports seeing & sharing with a group without having access to group contents.NewActions
Related to Arvados - Bug #16538: workbench 2 should not allow sharing "write" or "manage" to all users groupRejectedActions
Actions

Also available in: Atom PDF