коммит произвёл
GitHub
родитель
7a4d31c583
Коммит
86290685ae
@@ -98,43 +98,43 @@ func TestImportImportScheme(t *testing.T) {
|
||||
assert.Equal(t, *data.Description, scheme.Description)
|
||||
assert.Equal(t, *data.Scope, scheme.Scope)
|
||||
|
||||
role, err := th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr := th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamAdminRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamUserRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamGuestRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelAdminRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelUserRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelGuestRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
@@ -155,43 +155,43 @@ func TestImportImportScheme(t *testing.T) {
|
||||
assert.Equal(t, *data.Description, scheme.Description)
|
||||
assert.Equal(t, *data.Scope, scheme.Scope)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamAdminRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamUserRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamGuestRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelAdminRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelUserRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelGuestRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
@@ -285,43 +285,43 @@ func TestImportImportSchemeWithoutGuestRoles(t *testing.T) {
|
||||
assert.Equal(t, *data.Description, scheme.Description)
|
||||
assert.Equal(t, *data.Scope, scheme.Scope)
|
||||
|
||||
role, err := th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr := th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamAdminRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamUserRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamGuestRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelAdminRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelUserRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelGuestRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
@@ -342,43 +342,43 @@ func TestImportImportSchemeWithoutGuestRoles(t *testing.T) {
|
||||
assert.Equal(t, *data.Description, scheme.Description)
|
||||
assert.Equal(t, *data.Scope, scheme.Scope)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamAdminRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamAdminRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamUserRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamUserRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultTeamGuestRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultTeamGuestRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelAdminRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelAdminRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelUserRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelUserRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
assert.True(t, role.SchemeManaged)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(scheme.DefaultChannelGuestRole)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.DefaultChannelGuestRole.DisplayName, role.DisplayName)
|
||||
assert.False(t, role.BuiltIn)
|
||||
@@ -412,8 +412,8 @@ func TestImportImportRole(t *testing.T) {
|
||||
err := th.App.importRole(&data, true, false)
|
||||
require.NotNil(t, err, "Should have failed to import.")
|
||||
|
||||
_, err = th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.NotNil(t, err, "Should have failed to import.")
|
||||
_, nErr := th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.NotNil(t, nErr, "Should have failed to import.")
|
||||
|
||||
// Try importing the valid role in dryRun mode.
|
||||
data.DisplayName = ptrStr("display name")
|
||||
@@ -421,8 +421,8 @@ func TestImportImportRole(t *testing.T) {
|
||||
err = th.App.importRole(&data, true, false)
|
||||
require.Nil(t, err, "Should have succeeded.")
|
||||
|
||||
_, err = th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.NotNil(t, err, "Role should not have imported as we are in dry run mode.")
|
||||
_, nErr = th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.NotNil(t, nErr, "Role should not have imported as we are in dry run mode.")
|
||||
|
||||
// Try importing an invalid role.
|
||||
data.DisplayName = nil
|
||||
@@ -430,8 +430,8 @@ func TestImportImportRole(t *testing.T) {
|
||||
err = th.App.importRole(&data, false, false)
|
||||
require.NotNil(t, err, "Should have failed to import.")
|
||||
|
||||
_, err = th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.NotNil(t, err, "Role should not have imported.")
|
||||
_, nErr = th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.NotNil(t, nErr, "Role should not have imported.")
|
||||
|
||||
// Try importing a valid role with all params set.
|
||||
data.DisplayName = ptrStr("display name")
|
||||
@@ -441,8 +441,8 @@ func TestImportImportRole(t *testing.T) {
|
||||
err = th.App.importRole(&data, false, false)
|
||||
require.Nil(t, err, "Should have succeeded.")
|
||||
|
||||
role, err := th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr := th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.Name, role.Name)
|
||||
assert.Equal(t, *data.DisplayName, role.DisplayName)
|
||||
@@ -459,8 +459,8 @@ func TestImportImportRole(t *testing.T) {
|
||||
err = th.App.importRole(&data, false, true)
|
||||
require.Nil(t, err, "Should have succeeded. %v", err)
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data.Name, role.Name)
|
||||
assert.Equal(t, *data.DisplayName, role.DisplayName)
|
||||
@@ -478,8 +478,8 @@ func TestImportImportRole(t *testing.T) {
|
||||
err = th.App.importRole(&data2, false, false)
|
||||
require.Nil(t, err, "Should have succeeded.")
|
||||
|
||||
role, err = th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.Nil(t, err, "Should have found the imported role.")
|
||||
role, nErr = th.App.Srv().Store.Role().GetByName(rid1)
|
||||
require.Nil(t, nErr, "Should have found the imported role.")
|
||||
|
||||
assert.Equal(t, *data2.Name, role.Name)
|
||||
assert.Equal(t, *data2.DisplayName, role.DisplayName)
|
||||
|
||||
@@ -122,8 +122,8 @@ func (a *App) DoEmojisPermissionsMigration() {
|
||||
|
||||
if role != nil {
|
||||
role.Permissions = append(role.Permissions, model.PERMISSION_CREATE_EMOJIS.Id, model.PERMISSION_DELETE_EMOJIS.Id)
|
||||
if _, err = a.Srv().Store.Role().Save(role); err != nil {
|
||||
mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(err))
|
||||
if _, nErr := a.Srv().Store.Role().Save(role); nErr != nil {
|
||||
mlog.Critical("Failed to migrate emojis creation permissions from mattermost config.", mlog.Err(nErr))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ func (a *App) ResetPermissionsSystem() *model.AppError {
|
||||
|
||||
// Purge all roles from the database.
|
||||
if err := a.Srv().Store.Role().PermanentDeleteAll(); err != nil {
|
||||
return err
|
||||
return model.NewAppError("ResetPermissionsSystem", "app.role.permanent_delete_all.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
// Remove the "System" table entry that marks the advanced permissions migration as done.
|
||||
|
||||
@@ -4,9 +4,12 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/mattermost/mattermost-server/v5/model"
|
||||
"github.com/mattermost/mattermost-server/v5/store"
|
||||
)
|
||||
|
||||
type permissionTransformation struct {
|
||||
@@ -162,7 +165,13 @@ func (a *App) doPermissionsMigration(key string, migrationMap permissionsMap) *m
|
||||
for _, role := range roles {
|
||||
role.Permissions = applyPermissionsMap(role, roleMap, migrationMap)
|
||||
if _, err := a.Srv().Store.Role().Save(role); err != nil {
|
||||
return err
|
||||
var invErr *store.ErrInvalidInput
|
||||
switch {
|
||||
case errors.As(err, &invErr):
|
||||
return model.NewAppError("doPermissionsMigration", "app.role.save.invalid_role.app_error", nil, invErr.Error(), http.StatusBadRequest)
|
||||
default:
|
||||
return model.NewAppError("doPermissionsMigration", "app.role.save.insert.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
93
app/role.go
93
app/role.go
@@ -4,29 +4,53 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
"github.com/mattermost/mattermost-server/v5/model"
|
||||
"github.com/mattermost/mattermost-server/v5/store"
|
||||
"github.com/mattermost/mattermost-server/v5/utils"
|
||||
)
|
||||
|
||||
func (a *App) GetRole(id string) (*model.Role, *model.AppError) {
|
||||
return a.Srv().Store.Role().Get(id)
|
||||
role, err := a.Srv().Store.Role().Get(id)
|
||||
if err != nil {
|
||||
var nfErr *store.ErrNotFound
|
||||
switch {
|
||||
case errors.As(err, &nfErr):
|
||||
return nil, model.NewAppError("GetRole", "app.role.get.app_error", nil, nfErr.Error(), http.StatusNotFound)
|
||||
default:
|
||||
return nil, model.NewAppError("GetRole", "app.role.get.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
return role, nil
|
||||
}
|
||||
|
||||
func (a *App) GetAllRoles() ([]*model.Role, *model.AppError) {
|
||||
return a.Srv().Store.Role().GetAll()
|
||||
roles, err := a.Srv().Store.Role().GetAll()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("GetAllRoles", "app.role.get_all.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return roles, nil
|
||||
}
|
||||
|
||||
func (s *Server) GetRoleByName(name string) (*model.Role, *model.AppError) {
|
||||
role, err := s.Store.Role().GetByName(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
role, nErr := s.Store.Role().GetByName(name)
|
||||
if nErr != nil {
|
||||
var nfErr *store.ErrNotFound
|
||||
switch {
|
||||
case errors.As(nErr, &nfErr):
|
||||
return nil, model.NewAppError("GetRoleByName", "app.role.get_by_name.app_error", nil, nfErr.Error(), http.StatusNotFound)
|
||||
default:
|
||||
return nil, model.NewAppError("GetRoleByName", "app.role.get_by_name.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
err = s.mergeChannelHigherScopedPermissions([]*model.Role{role})
|
||||
err := s.mergeChannelHigherScopedPermissions([]*model.Role{role})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -39,12 +63,12 @@ func (a *App) GetRoleByName(name string) (*model.Role, *model.AppError) {
|
||||
}
|
||||
|
||||
func (a *App) GetRolesByNames(names []string) ([]*model.Role, *model.AppError) {
|
||||
roles, err := a.Srv().Store.Role().GetByNames(names)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
roles, nErr := a.Srv().Store.Role().GetByNames(names)
|
||||
if nErr != nil {
|
||||
return nil, model.NewAppError("GetRolesByNames", "app.role.get_by_names.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
err = a.mergeChannelHigherScopedPermissions(roles)
|
||||
err := a.mergeChannelHigherScopedPermissions(roles)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -69,7 +93,7 @@ func (s *Server) mergeChannelHigherScopedPermissions(roles []*model.Role) *model
|
||||
|
||||
higherScopedPermissionsMap, err := s.Store.Role().ChannelHigherScopedPermissions(higherScopeNamesToQuery)
|
||||
if err != nil {
|
||||
return err
|
||||
return model.NewAppError("mergeChannelHigherScopedPermissions", "app.role.get_by_names.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
for _, role := range roles {
|
||||
@@ -112,14 +136,31 @@ func (a *App) CreateRole(role *model.Role) (*model.Role, *model.AppError) {
|
||||
role.BuiltIn = false
|
||||
role.SchemeManaged = false
|
||||
|
||||
return a.Srv().Store.Role().Save(role)
|
||||
var err error
|
||||
role, err = a.Srv().Store.Role().Save(role)
|
||||
if err != nil {
|
||||
var invErr *store.ErrInvalidInput
|
||||
switch {
|
||||
case errors.As(err, &invErr):
|
||||
return nil, model.NewAppError("CreateRole", "app.role.save.invalid_role.app_error", nil, invErr.Error(), http.StatusBadRequest)
|
||||
default:
|
||||
return nil, model.NewAppError("CreateRole", "app.role.save.insert.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
return role, nil
|
||||
}
|
||||
|
||||
func (a *App) UpdateRole(role *model.Role) (*model.Role, *model.AppError) {
|
||||
savedRole, err := a.Srv().Store.Role().Save(role)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var invErr *store.ErrInvalidInput
|
||||
switch {
|
||||
case errors.As(err, &invErr):
|
||||
return nil, model.NewAppError("UpdateRole", "app.role.save.invalid_role.app_error", nil, invErr.Error(), http.StatusBadRequest)
|
||||
default:
|
||||
return nil, model.NewAppError("UpdateRole", "app.role.save.insert.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
builtInChannelRoles := []string{
|
||||
@@ -138,23 +179,33 @@ func (a *App) UpdateRole(role *model.Role) (*model.Role, *model.AppError) {
|
||||
|
||||
if utils.StringInSlice(savedRole.Name, builtInChannelRoles) {
|
||||
roleRetrievalFunc = func() ([]*model.Role, *model.AppError) {
|
||||
return a.Srv().Store.Role().AllChannelSchemeRoles()
|
||||
roles, nErr := a.Srv().Store.Role().AllChannelSchemeRoles()
|
||||
if nErr != nil {
|
||||
return nil, model.NewAppError("UpdateRole", "app.role.get.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return roles, nil
|
||||
}
|
||||
} else {
|
||||
roleRetrievalFunc = func() ([]*model.Role, *model.AppError) {
|
||||
return a.Srv().Store.Role().ChannelRolesUnderTeamRole(savedRole.Name)
|
||||
roles, nErr := a.Srv().Store.Role().ChannelRolesUnderTeamRole(savedRole.Name)
|
||||
if nErr != nil {
|
||||
return nil, model.NewAppError("UpdateRole", "app.role.get.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return roles, nil
|
||||
}
|
||||
}
|
||||
|
||||
impactedRoles, err := roleRetrievalFunc()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
impactedRoles, appErr := roleRetrievalFunc()
|
||||
if appErr != nil {
|
||||
return nil, appErr
|
||||
}
|
||||
impactedRoles = append(impactedRoles, role)
|
||||
|
||||
err = a.mergeChannelHigherScopedPermissions(impactedRoles)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
appErr = a.mergeChannelHigherScopedPermissions(impactedRoles)
|
||||
if appErr != nil {
|
||||
return nil, appErr
|
||||
}
|
||||
|
||||
for _, ir := range impactedRoles {
|
||||
|
||||
Ссылка в новой задаче
Block a user