github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/set_space_role_command.go (about) 1 package v7 2 3 import ( 4 "strings" 5 6 "github.com/LukasHeimann/cloudfoundrycli/v8/api/cloudcontroller/ccerror" 7 "github.com/LukasHeimann/cloudfoundrycli/v8/api/cloudcontroller/ccv3/constant" 8 "github.com/LukasHeimann/cloudfoundrycli/v8/cf/errors" 9 "github.com/LukasHeimann/cloudfoundrycli/v8/command/flag" 10 "github.com/LukasHeimann/cloudfoundrycli/v8/command/translatableerror" 11 ) 12 13 type SetSpaceRoleCommand struct { 14 BaseCommand 15 16 Args flag.SpaceRoleArgs `positional-args:"yes"` 17 IsClient bool `long:"client" description:"Assign a space role to a client-id of a (non-user) service account"` 18 Origin string `long:"origin" description:"Indicates the identity provider to be used for authentication"` 19 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\n SpaceSupporter [Beta role, subject to change] - Manage app lifecycle and service bindings"` 20 relatedCommands interface{} `related_commands:"space-users, unset-space-role"` 21 } 22 23 func (cmd *SetSpaceRoleCommand) Execute(args []string) error { 24 err := cmd.validateFlags() 25 if err != nil { 26 return err 27 } 28 29 err = cmd.SharedActor.CheckTarget(false, false) 30 if err != nil { 31 return err 32 } 33 34 currentUser, err := cmd.Actor.GetCurrentUser() 35 if err != nil { 36 return err 37 } 38 39 cmd.UI.DisplayTextWithFlavor("Assigning role {{.RoleType}} to user {{.TargetUserName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUserName}}...", map[string]interface{}{ 40 "RoleType": cmd.Args.Role.Role, 41 "TargetUserName": cmd.Args.Username, 42 "OrgName": cmd.Args.Organization, 43 "SpaceName": cmd.Args.Space, 44 "CurrentUserName": currentUser.Name, 45 }) 46 47 roleType, err := convertSpaceRoleType(cmd.Args.Role) 48 if err != nil { 49 return err 50 } 51 52 org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.Args.Organization) 53 cmd.UI.DisplayWarnings(warnings) 54 if err != nil { 55 return err 56 } 57 58 space, warnings, err := cmd.Actor.GetSpaceByNameAndOrganization(cmd.Args.Space, org.GUID) 59 cmd.UI.DisplayWarnings(warnings) 60 if err != nil { 61 return err 62 } 63 64 warnings, err = cmd.Actor.CreateSpaceRole(roleType, org.GUID, space.GUID, cmd.Args.Username, cmd.Origin, cmd.IsClient) 65 cmd.UI.DisplayWarnings(warnings) 66 if err != nil { 67 if _, ok := err.(ccerror.RoleAlreadyExistsError); ok { 68 cmd.UI.DisplayWarning("User '{{.TargetUserName}}' already has role '{{.RoleType}}' in org '{{.OrgName}}' / space '{{.SpaceName}}'.", map[string]interface{}{ 69 "RoleType": cmd.Args.Role.Role, 70 "TargetUserName": cmd.Args.Username, 71 "OrgName": cmd.Args.Organization, 72 "SpaceName": cmd.Args.Space, 73 }) 74 } else { 75 return err 76 } 77 } 78 79 cmd.UI.DisplayOK() 80 81 return nil 82 } 83 84 func (cmd SetSpaceRoleCommand) validateFlags() error { 85 if cmd.IsClient && cmd.Origin != "" { 86 return translatableerror.ArgumentCombinationError{ 87 Args: []string{"--client", "--origin"}, 88 } 89 } 90 return nil 91 } 92 93 func convertSpaceRoleType(givenRole flag.SpaceRole) (constant.RoleType, error) { 94 switch strings.ToLower(givenRole.Role) { 95 case "spaceauditor": 96 return constant.SpaceAuditorRole, nil 97 case "spacemanager": 98 return constant.SpaceManagerRole, nil 99 case "spacedeveloper": 100 return constant.SpaceDeveloperRole, nil 101 case "spacesupporter": 102 return constant.SpaceSupporterRole, nil 103 default: 104 return "", errors.New("Invalid role type.") 105 } 106 }