github.com/nhannv/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  }