MCPcopy Index your code
hub / github.com/coder/coder / interactiveOrgRoleEdit

Function interactiveOrgRoleEdit

cli/organizationroles.go:373–439  ·  view source on GitHub ↗
(inv *serpent.Invocation, orgID uuid.UUID, updateRole *codersdk.Role)

Source from the content-addressed store, hash-verified

371}
372
373func interactiveOrgRoleEdit(inv *serpent.Invocation, orgID uuid.UUID, updateRole *codersdk.Role) (*codersdk.Role, error) {
374 var originalRole codersdk.Role
375 if updateRole == nil {
376 originalRole = codersdk.Role{
377 Name: inv.Args[0],
378 OrganizationID: orgID.String(),
379 }
380 } else {
381 originalRole = *updateRole
382 }
383
384 // Some checks since interactive mode is limited in what it currently sees
385 if len(originalRole.SitePermissions) > 0 {
386 return nil, xerrors.Errorf("unable to edit role in interactive mode, it contains site wide permissions")
387 }
388
389 if len(originalRole.UserPermissions) > 0 {
390 return nil, xerrors.Errorf("unable to edit role in interactive mode, it contains user permissions")
391 }
392
393 role := &originalRole
394 allowedResources := []codersdk.RBACResource{
395 codersdk.ResourceTemplate,
396 codersdk.ResourceWorkspace,
397 codersdk.ResourceUser,
398 codersdk.ResourceGroup,
399 }
400
401 const done = "Finish and submit changes"
402 const abort = "Cancel changes"
403
404 // Now starts the role editing "game".
405customRoleLoop:
406 for {
407 selected, err := cliui.Select(inv, cliui.SelectOptions{
408 Message: "Select which resources to edit permissions",
409 Options: append(permissionPreviews(role, allowedResources), done, abort),
410 })
411 if err != nil {
412 return role, xerrors.Errorf("selecting resource: %w", err)
413 }
414 switch selected {
415 case done:
416 break customRoleLoop
417 case abort:
418 return role, xerrors.Errorf("edit role %q aborted", role.Name)
419 default:
420 strs := strings.Split(selected, "::")
421 resource := strings.TrimSpace(strs[0])
422
423 actions, err := cliui.MultiSelect(inv, cliui.MultiSelectOptions{
424 Message: fmt.Sprintf("Select actions to allow across the whole deployment for resources=%q", resource),
425 Options: slice.ToStrings(codersdk.RBACResourceActions[codersdk.RBACResource(resource)]),
426 Defaults: defaultActions(role, resource),
427 })
428 if err != nil {
429 return role, xerrors.Errorf("selecting actions for resource %q: %w", resource, err)
430 }

Callers 2

Calls 9

SelectFunction · 0.92
MultiSelectFunction · 0.92
ToStringsFunction · 0.92
RBACResourceTypeAlias · 0.92
permissionPreviewsFunction · 0.85
defaultActionsFunction · 0.85
applyOrgResourceActionsFunction · 0.85
StringMethod · 0.45
ErrorfMethod · 0.45

Tested by

no test coverage detected