github.com/loafoe/cli@v7.1.0+incompatible/command/v7/set_space_role_command.go (about) 1 package v7 2 3 import ( 4 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 5 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 6 "code.cloudfoundry.org/cli/cf/errors" 7 "code.cloudfoundry.org/cli/command/flag" 8 "code.cloudfoundry.org/cli/command/translatableerror" 9 ) 10 11 type SetSpaceRoleCommand struct { 12 BaseCommand 13 14 Args flag.SpaceRoleArgs `positional-args:"yes"` 15 IsClient bool `long:"client" description:"Assign a space role to a client-id of a (non-user) service account"` 16 Origin string `long:"origin" description:"Indicates the identity provider to be used for authentication"` 17 usage interface{} `usage:"CF_NAME set-space-role USERNAME ORG SPACE ROLE\n CF_NAME set-space-role USERNAME ORG SPACE ROLE [--client]\n CF_NAME set-space-role USERNAME ORG SPACE ROLE [--origin ORIGIN]\n\nROLES:\n SpaceManager - Invite and manage users, and enable features for a given space\n SpaceDeveloper - Create and manage apps and services, and see logs and reports\n SpaceAuditor - View logs, reports, and settings on this space"` 18 relatedCommands interface{} `related_commands:"space-users, unset-space-role"` 19 } 20 21 func (cmd *SetSpaceRoleCommand) Execute(args []string) error { 22 err := cmd.validateFlags() 23 if err != nil { 24 return err 25 } 26 27 err = cmd.SharedActor.CheckTarget(false, false) 28 if err != nil { 29 return err 30 } 31 32 currentUser, err := cmd.Config.CurrentUser() 33 if err != nil { 34 return err 35 } 36 37 cmd.UI.DisplayTextWithFlavor("Assigning role {{.RoleType}} to user {{.TargetUserName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUserName}}...", map[string]interface{}{ 38 "RoleType": cmd.Args.Role.Role, 39 "TargetUserName": cmd.Args.Username, 40 "OrgName": cmd.Args.Organization, 41 "SpaceName": cmd.Args.Space, 42 "CurrentUserName": currentUser.Name, 43 }) 44 45 roleType, err := convertSpaceRoleType(cmd.Args.Role) 46 if err != nil { 47 return err 48 } 49 50 org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.Args.Organization) 51 cmd.UI.DisplayWarnings(warnings) 52 if err != nil { 53 return err 54 } 55 56 space, warnings, err := cmd.Actor.GetSpaceByNameAndOrganization(cmd.Args.Space, org.GUID) 57 cmd.UI.DisplayWarnings(warnings) 58 if err != nil { 59 return err 60 } 61 62 warnings, err = cmd.Actor.CreateSpaceRole(roleType, org.GUID, space.GUID, cmd.Args.Username, cmd.Origin, cmd.IsClient) 63 cmd.UI.DisplayWarnings(warnings) 64 if err != nil { 65 if _, ok := err.(ccerror.RoleAlreadyExistsError); ok { 66 cmd.UI.DisplayWarning("User '{{.TargetUserName}}' already has role '{{.RoleType}}' in org '{{.OrgName}}' / space '{{.SpaceName}}'.", map[string]interface{}{ 67 "RoleType": cmd.Args.Role.Role, 68 "TargetUserName": cmd.Args.Username, 69 "OrgName": cmd.Args.Organization, 70 "SpaceName": cmd.Args.Space, 71 }) 72 } else { 73 return err 74 } 75 } 76 77 cmd.UI.DisplayOK() 78 79 return nil 80 } 81 82 func (cmd SetSpaceRoleCommand) validateFlags() error { 83 if cmd.IsClient && cmd.Origin != "" { 84 return translatableerror.ArgumentCombinationError{ 85 Args: []string{"--client", "--origin"}, 86 } 87 } 88 return nil 89 } 90 91 func convertSpaceRoleType(givenRole flag.SpaceRole) (constant.RoleType, error) { 92 switch givenRole.Role { 93 case "SpaceAuditor": 94 return constant.SpaceAuditorRole, nil 95 case "SpaceManager": 96 return constant.SpaceManagerRole, nil 97 case "SpaceDeveloper": 98 return constant.SpaceDeveloperRole, nil 99 default: 100 return "", errors.New("Invalid role type.") 101 } 102 }