коммит произвёл
GitHub
родитель
4aac52bced
Коммит
6a77e24adc
@@ -55,6 +55,10 @@ type AppIface interface {
|
||||
// The result can be used, for example, to determine the set of users who would be removed from a channel if the
|
||||
// channel were group-constrained with the given groups.
|
||||
ChannelMembersMinusGroupMembers(channelID string, groupIDs []string, page, perPage int) ([]*model.UserWithGroups, int64, *model.AppError)
|
||||
// CheckProviderAttributes returns the empty string if the patch can be applied without
|
||||
// overriding attributes set by the user's login provider; otherwise, the name of the offending
|
||||
// field is returned.
|
||||
CheckProviderAttributes(user *model.User, patch *model.UserPatch) string
|
||||
// ClientConfigWithComputed gets the configuration in a format suitable for sending to the client.
|
||||
ClientConfigWithComputed() map[string]string
|
||||
// ConvertBotToUser converts a bot to user.
|
||||
|
||||
@@ -1114,6 +1114,23 @@ func (a *OpenTracingAppLayer) CheckPasswordAndAllCriteria(user *model.User, pass
|
||||
return resultVar0
|
||||
}
|
||||
|
||||
func (a *OpenTracingAppLayer) CheckProviderAttributes(user *model.User, patch *model.UserPatch) string {
|
||||
origCtx := a.ctx
|
||||
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CheckProviderAttributes")
|
||||
|
||||
a.ctx = newCtx
|
||||
a.app.Srv().Store.SetContext(newCtx)
|
||||
defer func() {
|
||||
a.app.Srv().Store.SetContext(origCtx)
|
||||
a.ctx = origCtx
|
||||
}()
|
||||
|
||||
defer span.Finish()
|
||||
resultVar0 := a.app.CheckProviderAttributes(user, patch)
|
||||
|
||||
return resultVar0
|
||||
}
|
||||
|
||||
func (a *OpenTracingAppLayer) CheckRolesExist(roleNames []string) *model.AppError {
|
||||
origCtx := a.ctx
|
||||
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CheckRolesExist")
|
||||
|
||||
31
app/user.go
31
app/user.go
@@ -1183,6 +1183,37 @@ func (a *App) UpdateUserAsUser(user *model.User, asAdmin bool) (*model.User, *mo
|
||||
return updatedUser, nil
|
||||
}
|
||||
|
||||
// CheckProviderAttributes returns the empty string if the patch can be applied without
|
||||
// overriding attributes set by the user's login provider; otherwise, the name of the offending
|
||||
// field is returned.
|
||||
func (a *App) CheckProviderAttributes(user *model.User, patch *model.UserPatch) string {
|
||||
tryingToChange := func(userValue *string, patchValue *string) bool {
|
||||
return patchValue != nil && *patchValue != *userValue
|
||||
}
|
||||
|
||||
// If any login provider is used, then the username may not be changed
|
||||
if user.AuthService != "" && tryingToChange(&user.Username, patch.Username) {
|
||||
return "username"
|
||||
}
|
||||
|
||||
LdapSettings := &a.Config().LdapSettings
|
||||
SamlSettings := &a.Config().SamlSettings
|
||||
|
||||
conflictField := ""
|
||||
if a.Ldap() != nil &&
|
||||
(user.IsLDAPUser() || (user.IsSAMLUser() && *SamlSettings.EnableSyncWithLdap)) {
|
||||
conflictField = a.Ldap().CheckProviderAttributes(LdapSettings, user, patch)
|
||||
} else if a.Saml() != nil && user.IsSAMLUser() {
|
||||
conflictField = a.Saml().CheckProviderAttributes(SamlSettings, user, patch)
|
||||
} else if user.IsOAuthUser() {
|
||||
if tryingToChange(&user.FirstName, patch.FirstName) || tryingToChange(&user.LastName, patch.LastName) {
|
||||
conflictField = "full name"
|
||||
}
|
||||
}
|
||||
|
||||
return conflictField
|
||||
}
|
||||
|
||||
func (a *App) PatchUser(userID string, patch *model.UserPatch, asAdmin bool) (*model.User, *model.AppError) {
|
||||
user, err := a.GetUser(userID)
|
||||
if err != nil {
|
||||
|
||||
Ссылка в новой задаче
Block a user