@@ -14,13 +14,17 @@ definition platform {
14
14
permission super_admin = administrator
15
15
}
16
16
17
+
17
18
// team is a collection of resources.
18
19
// TODO: Should we call this a namespace?
19
20
definition team {
20
21
// platform relation is the super admin level. All super-admin type permissions
21
22
// are passed through the team level.
22
23
relation platform: platform
23
24
25
+ // parent allows nesting teams
26
+ relation parent: team
27
+
24
28
// Teams have their own roles for user's to interact with team resources.
25
29
// Each role can be either a group or a user.
26
30
@@ -67,33 +71,34 @@ definition team {
67
71
* Other Roles *
68
72
*******************/
69
73
70
- // membership needs to include all ways in which someone is a member of this team.
71
- permission membership = member +
74
+ // direct_membership needs to include all ways in which someone is a member of this team.
75
+ // This does not include parent team members.
76
+ permission direct_membership = member +
72
77
workspace_viewer + workspace_creator + workspace_deletor + workspace_version_selector + dangerous_workspace_connector + workspace_editor +
73
78
template_viewer + template_creator + template_deletor + template_editor
74
79
75
80
/*************************
76
81
* Workspace Permissions *
77
82
*************************/
78
83
// view all workspaces owned by the team
79
- permission view_workspaces = platform->super_admin + workspace_viewer
80
- permission edit_workspaces = platform->super_admin + workspace_editor
81
- permission select_workspace_version = platform->super_admin + workspace_version_selector
82
- permission delete_workspaces = platform->super_admin + workspace_deletor
83
- permission connect_workspaces = dangerous_workspace_connector
84
+ permission view_workspaces = platform->super_admin + workspace_viewer + parent->view_workspaces
85
+ permission edit_workspaces = platform->super_admin + workspace_editor + parent->edit_workspaces
86
+ permission select_workspace_version = platform->super_admin + workspace_version_selector + parent->select_workspace_version
87
+ permission delete_workspaces = platform->super_admin + workspace_deletor + parent->delete_workspaces
88
+ permission connect_workspaces = dangerous_workspace_connector + parent->connect_workspaces
84
89
// create_workspace is on the team level object. A workspace that is created is owned by the team
85
90
// and the application should setup the correct permissions/relations for the new resource.
86
- permission create_workspace = platform->super_admin + workspace_creator
91
+ permission create_workspace = platform->super_admin + workspace_creator + parent->create_workspace
87
92
88
93
/************************
89
94
* Template Permissions *
90
95
************************/
91
- permission view_templates = platform->super_admin + template_viewer
92
- permission view_template_insights = platform->super_admin + template_insights_viewer
93
- permission edit_templates = platform->super_admin + template_editor
94
- permission delete_templates = platform->super_admin + template_deletor
95
- permission manage_template_permissions = platform->super_admin + template_permission_manager
96
- permission create_template = platform->super_admin + template_creator
96
+ permission view_templates = platform->super_admin + template_viewer + parent->view_templates
97
+ permission view_template_insights = platform->super_admin + template_insights_viewer + parent->view_template_insights
98
+ permission edit_templates = platform->super_admin + template_editor + parent->edit_templates
99
+ permission delete_templates = platform->super_admin + template_deletor + parent->delete_templates
100
+ permission manage_template_permissions = platform->super_admin + template_permission_manager + parent->manage_template_permissions
101
+ permission create_template = platform->super_admin + template_creator + parent->create_template
97
102
}
98
103
99
104
// group is a collection of users and operates exactly like a user from
@@ -129,12 +134,12 @@ definition workspace {
129
134
// Some perms require view as well
130
135
edit + delete + select_template_version + ssh +
131
136
// Give view permissons to any role that requires reading the workspace to conduct their actions.
132
- owner->view_workspaces +( viewer & owner->membership)
133
- permission edit = owner->edit_workspaces +( editor & owner->membership)
134
- permission delete = owner->delete_workspaces +( deletor & owner->membership)
137
+ owner->view_workspaces + viewer
138
+ permission edit = owner->edit_workspaces + editor
139
+ permission delete = owner->delete_workspaces + deletor
135
140
// TODO: Maybe a caveat to check if the selected version is the active template version, and if that is allowed.
136
- permission select_template_version = owner->select_workspace_version +( selector & owner->membership)
137
- permission ssh = owner->connect_workspaces +( connector & owner->membership)
141
+ permission select_template_version = owner->select_workspace_version + selector
142
+ permission ssh = owner->connect_workspaces + connector
138
143
}
139
144
140
145
definition workspace_build {