github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/user/set_space_role.go (about) 1 package user 2 3 import ( 4 "errors" 5 6 . "github.com/cloudfoundry/cli/cf/i18n" 7 "github.com/cloudfoundry/cli/flags" 8 9 "github.com/cloudfoundry/cli/cf/api" 10 "github.com/cloudfoundry/cli/cf/api/spaces" 11 "github.com/cloudfoundry/cli/cf/command_registry" 12 "github.com/cloudfoundry/cli/cf/configuration/core_config" 13 "github.com/cloudfoundry/cli/cf/models" 14 "github.com/cloudfoundry/cli/cf/requirements" 15 "github.com/cloudfoundry/cli/cf/terminal" 16 ) 17 18 type SpaceRoleSetter interface { 19 command_registry.Command 20 SetSpaceRole(space models.Space, role, userGuid, userName string) (err error) 21 } 22 23 type SetSpaceRole struct { 24 ui terminal.UI 25 config core_config.Reader 26 spaceRepo spaces.SpaceRepository 27 userRepo api.UserRepository 28 userReq requirements.UserRequirement 29 orgReq requirements.OrganizationRequirement 30 } 31 32 func init() { 33 command_registry.Register(&SetSpaceRole{}) 34 } 35 36 func (cmd *SetSpaceRole) MetaData() command_registry.CommandMetadata { 37 return command_registry.CommandMetadata{ 38 Name: "set-space-role", 39 Description: T("Assign a space role to a user"), 40 Usage: T("CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n") + 41 T("ROLES:\n") + 42 T(" SpaceManager - Invite and manage users, and enable features for a given space\n") + 43 T(" SpaceDeveloper - Create and manage apps and services, and see logs and reports\n") + 44 T(" SpaceAuditor - View logs, reports, and settings on this space\n"), 45 } 46 } 47 48 func (cmd *SetSpaceRole) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { 49 if len(fc.Args()) != 4 { 50 cmd.ui.Failed(T("Incorrect Usage. Requires USERNAME, ORG, SPACE, ROLE as arguments\n\n") + command_registry.Commands.CommandUsage("set-space-role")) 51 } 52 53 cmd.userReq = requirementsFactory.NewUserRequirement(fc.Args()[0]) 54 cmd.orgReq = requirementsFactory.NewOrganizationRequirement(fc.Args()[1]) 55 56 reqs = []requirements.Requirement{ 57 requirementsFactory.NewLoginRequirement(), 58 cmd.userReq, 59 cmd.orgReq, 60 } 61 return 62 } 63 64 func (cmd *SetSpaceRole) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 65 cmd.ui = deps.Ui 66 cmd.config = deps.Config 67 cmd.spaceRepo = deps.RepoLocator.GetSpaceRepository() 68 cmd.userRepo = deps.RepoLocator.GetUserRepository() 69 return cmd 70 } 71 72 func (cmd *SetSpaceRole) Execute(c flags.FlagContext) { 73 spaceName := c.Args()[2] 74 role := models.UserInputToSpaceRole[c.Args()[3]] 75 user := cmd.userReq.GetUser() 76 org := cmd.orgReq.GetOrganization() 77 78 space, apiErr := cmd.spaceRepo.FindByNameInOrg(spaceName, org.Guid) 79 if apiErr != nil { 80 cmd.ui.Failed(apiErr.Error()) 81 return 82 } 83 84 err := cmd.SetSpaceRole(space, role, user.Guid, user.Username) 85 if err != nil { 86 cmd.ui.Failed(err.Error()) 87 return 88 } 89 } 90 91 func (cmd *SetSpaceRole) SetSpaceRole(space models.Space, role, userGuid, userName string) (err error) { 92 cmd.ui.Say(T("Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", 93 map[string]interface{}{ 94 "Role": terminal.EntityNameColor(role), 95 "TargetUser": terminal.EntityNameColor(userName), 96 "TargetOrg": terminal.EntityNameColor(space.Organization.Name), 97 "TargetSpace": terminal.EntityNameColor(space.Name), 98 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 99 })) 100 101 apiErr := cmd.userRepo.SetSpaceRole(userGuid, space.Guid, space.Organization.Guid, role) 102 if apiErr != nil { 103 err = errors.New(apiErr.Error()) 104 return 105 } 106 107 cmd.ui.Ok() 108 return 109 }