github.com/hahmadia/mattermost-server@v5.11.1+incompatible/app/role.go (about) 1 // Copyright (c) 2018-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package app 5 6 import ( 7 "net/http" 8 "reflect" 9 "strings" 10 11 "github.com/mattermost/mattermost-server/model" 12 ) 13 14 func (a *App) GetRole(id string) (*model.Role, *model.AppError) { 15 result := <-a.Srv.Store.Role().Get(id) 16 if result.Err != nil { 17 return nil, result.Err 18 } 19 return result.Data.(*model.Role), nil 20 } 21 22 func (a *App) GetAllRoles() ([]*model.Role, *model.AppError) { 23 result := <-a.Srv.Store.Role().GetAll() 24 if result.Err != nil { 25 return nil, result.Err 26 } 27 return result.Data.([]*model.Role), nil 28 } 29 30 func (a *App) GetRoleByName(name string) (*model.Role, *model.AppError) { 31 result := <-a.Srv.Store.Role().GetByName(name) 32 if result.Err != nil { 33 return nil, result.Err 34 } 35 return result.Data.(*model.Role), nil 36 } 37 38 func (a *App) GetRolesByNames(names []string) ([]*model.Role, *model.AppError) { 39 result := <-a.Srv.Store.Role().GetByNames(names) 40 if result.Err != nil { 41 return nil, result.Err 42 } 43 return result.Data.([]*model.Role), nil 44 } 45 46 func (a *App) PatchRole(role *model.Role, patch *model.RolePatch) (*model.Role, *model.AppError) { 47 // If patch is a no-op then short-circuit the store. 48 if patch.Permissions != nil && reflect.DeepEqual(*patch.Permissions, role.Permissions) { 49 return role, nil 50 } 51 52 role.Patch(patch) 53 role, err := a.UpdateRole(role) 54 if err != nil { 55 return nil, err 56 } 57 58 return role, err 59 } 60 61 func (a *App) CreateRole(role *model.Role) (*model.Role, *model.AppError) { 62 role.Id = "" 63 role.CreateAt = 0 64 role.UpdateAt = 0 65 role.DeleteAt = 0 66 role.BuiltIn = false 67 role.SchemeManaged = false 68 69 result := <-a.Srv.Store.Role().Save(role) 70 if result.Err != nil { 71 return nil, result.Err 72 } 73 return result.Data.(*model.Role), nil 74 75 } 76 77 func (a *App) UpdateRole(role *model.Role) (*model.Role, *model.AppError) { 78 result := <-a.Srv.Store.Role().Save(role) 79 if result.Err != nil { 80 return nil, result.Err 81 } 82 a.sendUpdatedRoleEvent(role) 83 84 return role, nil 85 86 } 87 88 func (a *App) CheckRolesExist(roleNames []string) *model.AppError { 89 roles, err := a.GetRolesByNames(roleNames) 90 if err != nil { 91 return err 92 } 93 94 for _, name := range roleNames { 95 nameFound := false 96 for _, role := range roles { 97 if name == role.Name { 98 nameFound = true 99 break 100 } 101 } 102 if !nameFound { 103 return model.NewAppError("CheckRolesExist", "app.role.check_roles_exist.role_not_found", nil, "role="+name, http.StatusBadRequest) 104 } 105 } 106 107 return nil 108 } 109 110 func (a *App) sendUpdatedRoleEvent(role *model.Role) { 111 message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_ROLE_UPDATED, "", "", "", nil) 112 message.Add("role", role.ToJson()) 113 114 a.Srv.Go(func() { 115 a.Publish(message) 116 }) 117 } 118 119 func RemoveRoles(rolesToRemove []string, roles string) string { 120 roleList := strings.Fields(roles) 121 newRoles := make([]string, 0) 122 123 for _, role := range roleList { 124 shouldRemove := false 125 for _, roleToRemove := range rolesToRemove { 126 if role == roleToRemove { 127 shouldRemove = true 128 break 129 } 130 } 131 if !shouldRemove { 132 newRoles = append(newRoles, role) 133 } 134 } 135 136 return strings.Join(newRoles, " ") 137 }