github.com/rajatvaryani/mattermost-server@v5.11.1+incompatible/cmd/mattermost/commands/roles.go (about) 1 // Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package commands 5 6 import ( 7 "errors" 8 "strings" 9 10 "github.com/spf13/cobra" 11 12 "github.com/mattermost/mattermost-server/model" 13 ) 14 15 var RolesCmd = &cobra.Command{ 16 Use: "roles", 17 Short: "Management of user roles", 18 } 19 20 var MakeSystemAdminCmd = &cobra.Command{ 21 Use: "system_admin [users]", 22 Short: "Set a user as system admin", 23 Long: "Make some users system admins", 24 Example: " roles system_admin user1", 25 RunE: makeSystemAdminCmdF, 26 } 27 28 var MakeMemberCmd = &cobra.Command{ 29 Use: "member [users]", 30 Short: "Remove system admin privileges", 31 Long: "Remove system admin privileges from some users.", 32 Example: " roles member user1", 33 RunE: makeMemberCmdF, 34 } 35 36 func init() { 37 RolesCmd.AddCommand( 38 MakeSystemAdminCmd, 39 MakeMemberCmd, 40 ) 41 RootCmd.AddCommand(RolesCmd) 42 } 43 44 func makeSystemAdminCmdF(command *cobra.Command, args []string) error { 45 a, err := InitDBCommandContextCobra(command) 46 if err != nil { 47 return err 48 } 49 defer a.Shutdown() 50 51 if len(args) < 1 { 52 return errors.New("Enter at least one user.") 53 } 54 55 users := getUsersFromUserArgs(a, args) 56 for i, user := range users { 57 if user == nil { 58 return errors.New("Unable to find user '" + args[i] + "'") 59 } 60 61 systemAdmin := false 62 systemUser := false 63 64 roles := strings.Fields(user.Roles) 65 for _, role := range roles { 66 switch role { 67 case model.SYSTEM_ADMIN_ROLE_ID: 68 systemAdmin = true 69 case model.SYSTEM_USER_ROLE_ID: 70 systemUser = true 71 } 72 } 73 74 if !systemUser { 75 roles = append(roles, model.SYSTEM_USER_ROLE_ID) 76 } 77 if !systemAdmin { 78 roles = append(roles, model.SYSTEM_ADMIN_ROLE_ID) 79 } 80 81 if _, err := a.UpdateUserRoles(user.Id, strings.Join(roles, " "), true); err != nil { 82 return err 83 } 84 } 85 86 return nil 87 } 88 89 func makeMemberCmdF(command *cobra.Command, args []string) error { 90 a, err := InitDBCommandContextCobra(command) 91 if err != nil { 92 return err 93 } 94 defer a.Shutdown() 95 96 if len(args) < 1 { 97 return errors.New("Enter at least one user.") 98 } 99 100 users := getUsersFromUserArgs(a, args) 101 for i, user := range users { 102 if user == nil { 103 return errors.New("Unable to find user '" + args[i] + "'") 104 } 105 106 systemUser := false 107 var newRoles []string 108 109 roles := strings.Fields(user.Roles) 110 for _, role := range roles { 111 switch role { 112 case model.SYSTEM_ADMIN_ROLE_ID: 113 default: 114 if role == model.SYSTEM_USER_ROLE_ID { 115 systemUser = true 116 } 117 newRoles = append(newRoles, role) 118 } 119 } 120 121 if !systemUser { 122 newRoles = append(roles, model.SYSTEM_USER_ROLE_ID) 123 } 124 125 if _, err := a.UpdateUserRoles(user.Id, strings.Join(newRoles, " "), true); err != nil { 126 return err 127 } 128 } 129 130 return nil 131 }