github.com/spline-fu/mattermost-server@v4.10.10+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 "reflect" 8 9 "net/http" 10 11 "github.com/mattermost/mattermost-server/model" 12 ) 13 14 func (a *App) GetRole(id string) (*model.Role, *model.AppError) { 15 if result := <-a.Srv.Store.Role().Get(id); result.Err != nil { 16 return nil, result.Err 17 } else { 18 return result.Data.(*model.Role), nil 19 } 20 } 21 22 func (a *App) GetRoleByName(name string) (*model.Role, *model.AppError) { 23 if result := <-a.Srv.Store.Role().GetByName(name); result.Err != nil { 24 return nil, result.Err 25 } else { 26 return result.Data.(*model.Role), nil 27 } 28 } 29 30 func (a *App) GetRolesByNames(names []string) ([]*model.Role, *model.AppError) { 31 if result := <-a.Srv.Store.Role().GetByNames(names); result.Err != nil { 32 return nil, result.Err 33 } else { 34 return result.Data.([]*model.Role), nil 35 } 36 } 37 38 func (a *App) GetAllRoles() ([]*model.Role, *model.AppError) { 39 result := <-a.Srv.Store.Role().GetAll() 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) UpdateRole(role *model.Role) (*model.Role, *model.AppError) { 62 if result := <-a.Srv.Store.Role().Save(role); result.Err != nil { 63 return nil, result.Err 64 } else { 65 a.sendUpdatedRoleEvent(role) 66 67 return role, nil 68 } 69 } 70 71 func (a *App) CheckRolesExist(roleNames []string) *model.AppError { 72 roles, err := a.GetRolesByNames(roleNames) 73 if err != nil { 74 return err 75 } 76 77 for _, name := range roleNames { 78 nameFound := false 79 for _, role := range roles { 80 if name == role.Name { 81 nameFound = true 82 break 83 } 84 } 85 if !nameFound { 86 return model.NewAppError("CheckRolesExist", "app.role.check_roles_exist.role_not_found", nil, "role="+name, http.StatusBadRequest) 87 } 88 } 89 90 return nil 91 } 92 93 func (a *App) sendUpdatedRoleEvent(role *model.Role) { 94 message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_ROLE_UPDATED, "", "", "", nil) 95 message.Add("role", role.ToJson()) 96 97 a.Go(func() { 98 a.Publish(message) 99 }) 100 }