MM-15021: Adding new builtin system schema for Guests (#10601)
* MM-15021: Adding new builtin system schema for Guests * Fixing tests * Setting properly the permissions * Adding guests to sampledata * Restrict more roles updates in the app layer for guests * Adding comment to explain that permissions migration must go at the end * Setting the default guest role for custom scheme during migration * Fixing import and export * Creating scheme guest roles on migration * Fixing tests * Fixing tests * Fixing tests
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
987360f325
Коммит
584ec68755
@@ -49,6 +49,7 @@ type channelMember struct {
|
||||
MentionCount int64
|
||||
NotifyProps model.StringMap
|
||||
LastUpdateAt int64
|
||||
SchemeGuest sql.NullBool
|
||||
SchemeUser sql.NullBool
|
||||
SchemeAdmin sql.NullBool
|
||||
}
|
||||
@@ -63,6 +64,7 @@ func NewChannelMemberFromModel(cm *model.ChannelMember) *channelMember {
|
||||
MentionCount: cm.MentionCount,
|
||||
NotifyProps: cm.NotifyProps,
|
||||
LastUpdateAt: cm.LastUpdateAt,
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: cm.SchemeGuest},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: cm.SchemeUser},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: cm.SchemeAdmin},
|
||||
}
|
||||
@@ -77,10 +79,13 @@ type channelMemberWithSchemeRoles struct {
|
||||
MentionCount int64
|
||||
NotifyProps model.StringMap
|
||||
LastUpdateAt int64
|
||||
SchemeGuest sql.NullBool
|
||||
SchemeUser sql.NullBool
|
||||
SchemeAdmin sql.NullBool
|
||||
TeamSchemeDefaultGuestRole sql.NullString
|
||||
TeamSchemeDefaultUserRole sql.NullString
|
||||
TeamSchemeDefaultAdminRole sql.NullString
|
||||
ChannelSchemeDefaultGuestRole sql.NullString
|
||||
ChannelSchemeDefaultUserRole sql.NullString
|
||||
ChannelSchemeDefaultAdminRole sql.NullString
|
||||
}
|
||||
@@ -93,11 +98,16 @@ func (db channelMemberWithSchemeRoles) ToModel() *model.ChannelMember {
|
||||
|
||||
// Identify any system-wide scheme derived roles that are in "Roles" field due to not yet being migrated,
|
||||
// and exclude them from ExplicitRoles field.
|
||||
schemeGuest := db.SchemeGuest.Valid && db.SchemeGuest.Bool
|
||||
schemeUser := db.SchemeUser.Valid && db.SchemeUser.Bool
|
||||
schemeAdmin := db.SchemeAdmin.Valid && db.SchemeAdmin.Bool
|
||||
for _, role := range strings.Fields(db.Roles) {
|
||||
isImplicit := false
|
||||
if role == model.CHANNEL_USER_ROLE_ID {
|
||||
if role == model.CHANNEL_GUEST_ROLE_ID {
|
||||
// We have an implicit role via the system scheme. Override the "schemeGuest" field to true.
|
||||
schemeGuest = true
|
||||
isImplicit = true
|
||||
} else if role == model.CHANNEL_USER_ROLE_ID {
|
||||
// We have an implicit role via the system scheme. Override the "schemeUser" field to true.
|
||||
schemeUser = true
|
||||
isImplicit = true
|
||||
@@ -116,6 +126,15 @@ func (db channelMemberWithSchemeRoles) ToModel() *model.ChannelMember {
|
||||
// Add any scheme derived roles that are not in the Roles field due to being Implicit from the Scheme, and add
|
||||
// them to the Roles field for backwards compatibility reasons.
|
||||
var schemeImpliedRoles []string
|
||||
if db.SchemeGuest.Valid && db.SchemeGuest.Bool {
|
||||
if db.ChannelSchemeDefaultGuestRole.Valid && db.ChannelSchemeDefaultGuestRole.String != "" {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, db.ChannelSchemeDefaultGuestRole.String)
|
||||
} else if db.TeamSchemeDefaultGuestRole.Valid && db.TeamSchemeDefaultGuestRole.String != "" {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, db.TeamSchemeDefaultGuestRole.String)
|
||||
} else {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, model.CHANNEL_GUEST_ROLE_ID)
|
||||
}
|
||||
}
|
||||
if db.SchemeUser.Valid && db.SchemeUser.Bool {
|
||||
if db.ChannelSchemeDefaultUserRole.Valid && db.ChannelSchemeDefaultUserRole.String != "" {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, db.ChannelSchemeDefaultUserRole.String)
|
||||
@@ -157,6 +176,7 @@ func (db channelMemberWithSchemeRoles) ToModel() *model.ChannelMember {
|
||||
LastUpdateAt: db.LastUpdateAt,
|
||||
SchemeAdmin: schemeAdmin,
|
||||
SchemeUser: schemeUser,
|
||||
SchemeGuest: schemeGuest,
|
||||
ExplicitRoles: strings.Join(explicitRoles, " "),
|
||||
}
|
||||
}
|
||||
@@ -174,10 +194,13 @@ func (db channelMemberWithSchemeRolesList) ToModel() *model.ChannelMembers {
|
||||
type allChannelMember struct {
|
||||
ChannelId string
|
||||
Roles string
|
||||
SchemeGuest sql.NullBool
|
||||
SchemeUser sql.NullBool
|
||||
SchemeAdmin sql.NullBool
|
||||
TeamSchemeDefaultGuestRole sql.NullString
|
||||
TeamSchemeDefaultUserRole sql.NullString
|
||||
TeamSchemeDefaultAdminRole sql.NullString
|
||||
ChannelSchemeDefaultGuestRole sql.NullString
|
||||
ChannelSchemeDefaultUserRole sql.NullString
|
||||
ChannelSchemeDefaultAdminRole sql.NullString
|
||||
}
|
||||
@@ -190,6 +213,15 @@ func (db allChannelMember) Process() (string, string) {
|
||||
// Add any scheme derived roles that are not in the Roles field due to being Implicit from the Scheme, and add
|
||||
// them to the Roles field for backwards compatibility reasons.
|
||||
var schemeImpliedRoles []string
|
||||
if db.SchemeGuest.Valid && db.SchemeGuest.Bool {
|
||||
if db.ChannelSchemeDefaultGuestRole.Valid && db.ChannelSchemeDefaultGuestRole.String != "" {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, db.ChannelSchemeDefaultGuestRole.String)
|
||||
} else if db.TeamSchemeDefaultGuestRole.Valid && db.TeamSchemeDefaultGuestRole.String != "" {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, db.TeamSchemeDefaultGuestRole.String)
|
||||
} else {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, model.CHANNEL_GUEST_ROLE_ID)
|
||||
}
|
||||
}
|
||||
if db.SchemeUser.Valid && db.SchemeUser.Bool {
|
||||
if db.ChannelSchemeDefaultUserRole.Valid && db.ChannelSchemeDefaultUserRole.String != "" {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, db.ChannelSchemeDefaultUserRole.String)
|
||||
@@ -1266,8 +1298,10 @@ func (s SqlChannelStore) GetDeleted(teamId string, offset int, limit int) store.
|
||||
var CHANNEL_MEMBERS_WITH_SCHEME_SELECT_QUERY = `
|
||||
SELECT
|
||||
ChannelMembers.*,
|
||||
TeamScheme.DefaultChannelGuestRole TeamSchemeDefaultGuestRole,
|
||||
TeamScheme.DefaultChannelUserRole TeamSchemeDefaultUserRole,
|
||||
TeamScheme.DefaultChannelAdminRole TeamSchemeDefaultAdminRole,
|
||||
ChannelScheme.DefaultChannelGuestRole ChannelSchemeDefaultGuestRole,
|
||||
ChannelScheme.DefaultChannelUserRole ChannelSchemeDefaultUserRole,
|
||||
ChannelScheme.DefaultChannelAdminRole ChannelSchemeDefaultAdminRole
|
||||
FROM
|
||||
@@ -1464,8 +1498,10 @@ func (s SqlChannelStore) GetMemberForPost(postId string, userId string) store.St
|
||||
`
|
||||
SELECT
|
||||
ChannelMembers.*,
|
||||
TeamScheme.DefaultChannelGuestRole TeamSchemeDefaultGuestRole,
|
||||
TeamScheme.DefaultChannelUserRole TeamSchemeDefaultUserRole,
|
||||
TeamScheme.DefaultChannelAdminRole TeamSchemeDefaultAdminRole,
|
||||
ChannelScheme.DefaultChannelGuestRole ChannelSchemeDefaultGuestRole,
|
||||
ChannelScheme.DefaultChannelUserRole ChannelSchemeDefaultUserRole,
|
||||
ChannelScheme.DefaultChannelAdminRole ChannelSchemeDefaultAdminRole
|
||||
FROM
|
||||
@@ -1518,9 +1554,12 @@ func (s SqlChannelStore) GetAllChannelMembersForUser(userId string, allowFromCac
|
||||
var data allChannelMembers
|
||||
_, err := s.GetReplica().Select(&data, `
|
||||
SELECT
|
||||
ChannelMembers.ChannelId, ChannelMembers.Roles, ChannelMembers.SchemeUser, ChannelMembers.SchemeAdmin,
|
||||
ChannelMembers.ChannelId, ChannelMembers.Roles,
|
||||
ChannelMembers.SchemeGuest, ChannelMembers.SchemeUser, ChannelMembers.SchemeAdmin,
|
||||
TeamScheme.DefaultChannelGuestRole TeamSchemeDefaultGuestRole,
|
||||
TeamScheme.DefaultChannelUserRole TeamSchemeDefaultUserRole,
|
||||
TeamScheme.DefaultChannelAdminRole TeamSchemeDefaultAdminRole,
|
||||
ChannelScheme.DefaultChannelGuestRole ChannelSchemeDefaultGuestRole,
|
||||
ChannelScheme.DefaultChannelUserRole ChannelSchemeDefaultUserRole,
|
||||
ChannelScheme.DefaultChannelAdminRole ChannelSchemeDefaultAdminRole
|
||||
FROM
|
||||
@@ -2336,11 +2375,16 @@ func (s SqlChannelStore) MigrateChannelMembers(fromChannelId string, fromUserId
|
||||
if !member.SchemeUser.Valid {
|
||||
member.SchemeUser = sql.NullBool{Bool: false, Valid: true}
|
||||
}
|
||||
if !member.SchemeGuest.Valid {
|
||||
member.SchemeGuest = sql.NullBool{Bool: false, Valid: true}
|
||||
}
|
||||
for _, role := range roles {
|
||||
if role == model.CHANNEL_ADMIN_ROLE_ID {
|
||||
member.SchemeAdmin = sql.NullBool{Bool: true, Valid: true}
|
||||
} else if role == model.CHANNEL_USER_ROLE_ID {
|
||||
member.SchemeUser = sql.NullBool{Bool: true, Valid: true}
|
||||
} else if role == model.CHANNEL_GUEST_ROLE_ID {
|
||||
member.SchemeGuest = sql.NullBool{Bool: true, Valid: true}
|
||||
} else {
|
||||
newRoles = append(newRoles, role)
|
||||
}
|
||||
@@ -2492,7 +2536,17 @@ func (s SqlChannelStore) GetChannelMembersForExport(userId string, teamId string
|
||||
var members []*model.ChannelMemberForExport
|
||||
_, err := s.GetReplica().Select(&members, `
|
||||
SELECT
|
||||
ChannelMembers.*,
|
||||
ChannelMembers.ChannelId,
|
||||
ChannelMembers.UserId,
|
||||
ChannelMembers.Roles,
|
||||
ChannelMembers.LastViewedAt,
|
||||
ChannelMembers.MsgCount,
|
||||
ChannelMembers.MentionCount,
|
||||
ChannelMembers.NotifyProps,
|
||||
ChannelMembers.LastUpdateAt,
|
||||
ChannelMembers.SchemeUser,
|
||||
ChannelMembers.SchemeAdmin,
|
||||
(ChannelMembers.SchemeGuest IS NOT NULL AND ChannelMembers.SchemeGuest) as SchemeGuest,
|
||||
Channels.Name as ChannelName
|
||||
FROM
|
||||
ChannelMembers
|
||||
@@ -2543,7 +2597,7 @@ func (s SqlChannelStore) GetAllDirectChannelsForExportAfter(limit int, afterId s
|
||||
channelIds = append(channelIds, channel.Id)
|
||||
}
|
||||
query = s.getQueryBuilder().
|
||||
Select("*").
|
||||
Select("u.Username as Username, ChannelId, UserId, cm.Roles as Roles, LastViewedAt, MsgCount, MentionCount, cm.NotifyProps as NotifyProps, LastUpdateAt, SchemeUser, SchemeAdmin, (SchemeGuest IS NOT NULL AND SchemeGuest) as SchemeGuest").
|
||||
From("ChannelMembers cm").
|
||||
Join("Users u ON ( u.Id = cm.UserId )").
|
||||
Where(sq.And{
|
||||
|
||||
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@@ -1401,7 +1401,7 @@ func (s *SqlPostStore) GetDirectPostParentsForExportAfter(limit int, afterId str
|
||||
channelIds = append(channelIds, post.ChannelId)
|
||||
}
|
||||
query = s.getQueryBuilder().
|
||||
Select("*").
|
||||
Select("u.Username as Username, ChannelId, UserId, cm.Roles as Roles, LastViewedAt, MsgCount, MentionCount, cm.NotifyProps as NotifyProps, LastUpdateAt, SchemeUser, SchemeAdmin, (SchemeGuest IS NOT NULL AND SchemeGuest) as SchemeGuest").
|
||||
From("ChannelMembers cm").
|
||||
Join("Users u ON ( u.Id = cm.UserId )").
|
||||
Where(sq.Eq{
|
||||
|
||||
@@ -26,8 +26,10 @@ func initSqlSupplierSchemes(sqlStore SqlStore) {
|
||||
table.ColMap("Scope").SetMaxSize(32)
|
||||
table.ColMap("DefaultTeamAdminRole").SetMaxSize(64)
|
||||
table.ColMap("DefaultTeamUserRole").SetMaxSize(64)
|
||||
table.ColMap("DefaultTeamGuestRole").SetMaxSize(64)
|
||||
table.ColMap("DefaultChannelAdminRole").SetMaxSize(64)
|
||||
table.ColMap("DefaultChannelUserRole").SetMaxSize(64)
|
||||
table.ColMap("DefaultChannelGuestRole").SetMaxSize(64)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +73,7 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
|
||||
result := store.NewSupplierResult()
|
||||
|
||||
// Fetch the default system scheme roles to populate default permissions.
|
||||
defaultRoleNames := []string{model.TEAM_ADMIN_ROLE_ID, model.TEAM_USER_ROLE_ID, model.CHANNEL_ADMIN_ROLE_ID, model.CHANNEL_USER_ROLE_ID}
|
||||
defaultRoleNames := []string{model.TEAM_ADMIN_ROLE_ID, model.TEAM_USER_ROLE_ID, model.TEAM_GUEST_ROLE_ID, model.CHANNEL_ADMIN_ROLE_ID, model.CHANNEL_USER_ROLE_ID, model.CHANNEL_GUEST_ROLE_ID}
|
||||
defaultRoles := make(map[string]*model.Role)
|
||||
if rolesResult := s.RoleGetByNames(ctx, defaultRoleNames); rolesResult.Err != nil {
|
||||
result.Err = rolesResult.Err
|
||||
@@ -83,14 +85,18 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
|
||||
defaultRoles[model.TEAM_ADMIN_ROLE_ID] = role
|
||||
case model.TEAM_USER_ROLE_ID:
|
||||
defaultRoles[model.TEAM_USER_ROLE_ID] = role
|
||||
case model.TEAM_GUEST_ROLE_ID:
|
||||
defaultRoles[model.TEAM_GUEST_ROLE_ID] = role
|
||||
case model.CHANNEL_ADMIN_ROLE_ID:
|
||||
defaultRoles[model.CHANNEL_ADMIN_ROLE_ID] = role
|
||||
case model.CHANNEL_USER_ROLE_ID:
|
||||
defaultRoles[model.CHANNEL_USER_ROLE_ID] = role
|
||||
case model.CHANNEL_GUEST_ROLE_ID:
|
||||
defaultRoles[model.CHANNEL_GUEST_ROLE_ID] = role
|
||||
}
|
||||
}
|
||||
|
||||
if len(defaultRoles) != 4 {
|
||||
if len(defaultRoles) != 6 {
|
||||
result.Err = model.NewAppError("SqlSchemeStore.SaveScheme", "store.sql_scheme.save.retrieve_default_scheme_roles.app_error", nil, "", http.StatusInternalServerError)
|
||||
return result
|
||||
}
|
||||
@@ -127,6 +133,21 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
|
||||
} else {
|
||||
scheme.DefaultTeamUserRole = saveRoleResult.Data.(*model.Role).Name
|
||||
}
|
||||
|
||||
// Team Guest Role
|
||||
teamGuestRole := &model.Role{
|
||||
Name: model.NewId(),
|
||||
DisplayName: fmt.Sprintf("Team Guest Role for Scheme %s", scheme.Name),
|
||||
Permissions: defaultRoles[model.TEAM_GUEST_ROLE_ID].Permissions,
|
||||
SchemeManaged: true,
|
||||
}
|
||||
|
||||
if saveRoleResult := s.createRole(ctx, teamGuestRole, transaction); saveRoleResult.Err != nil {
|
||||
result.Err = saveRoleResult.Err
|
||||
return result
|
||||
} else {
|
||||
scheme.DefaultTeamGuestRole = saveRoleResult.Data.(*model.Role).Name
|
||||
}
|
||||
}
|
||||
if scheme.Scope == model.SCHEME_SCOPE_TEAM || scheme.Scope == model.SCHEME_SCOPE_CHANNEL {
|
||||
// Channel Admin Role
|
||||
@@ -158,6 +179,21 @@ func (s *SqlSupplier) createScheme(ctx context.Context, scheme *model.Scheme, tr
|
||||
} else {
|
||||
scheme.DefaultChannelUserRole = saveRoleResult.Data.(*model.Role).Name
|
||||
}
|
||||
|
||||
// Channel Guest Role
|
||||
channelGuestRole := &model.Role{
|
||||
Name: model.NewId(),
|
||||
DisplayName: fmt.Sprintf("Channel Guest Role for Scheme %s", scheme.Name),
|
||||
Permissions: defaultRoles[model.CHANNEL_GUEST_ROLE_ID].Permissions,
|
||||
SchemeManaged: true,
|
||||
}
|
||||
|
||||
if saveRoleResult := s.createRole(ctx, channelGuestRole, transaction); saveRoleResult.Err != nil {
|
||||
result.Err = saveRoleResult.Err
|
||||
return result
|
||||
} else {
|
||||
scheme.DefaultChannelGuestRole = saveRoleResult.Data.(*model.Role).Name
|
||||
}
|
||||
}
|
||||
|
||||
scheme.Id = model.NewId()
|
||||
@@ -250,9 +286,9 @@ func (s *SqlSupplier) SchemeDelete(ctx context.Context, schemeId string, hints .
|
||||
}
|
||||
|
||||
// Delete the roles belonging to the scheme.
|
||||
roleNames := []string{scheme.DefaultChannelUserRole, scheme.DefaultChannelAdminRole}
|
||||
roleNames := []string{scheme.DefaultChannelGuestRole, scheme.DefaultChannelUserRole, scheme.DefaultChannelAdminRole}
|
||||
if scheme.Scope == model.SCHEME_SCOPE_TEAM {
|
||||
roleNames = append(roleNames, scheme.DefaultTeamUserRole, scheme.DefaultTeamAdminRole)
|
||||
roleNames = append(roleNames, scheme.DefaultTeamGuestRole, scheme.DefaultTeamUserRole, scheme.DefaultTeamAdminRole)
|
||||
}
|
||||
|
||||
var inQueryList []string
|
||||
|
||||
@@ -34,6 +34,7 @@ type teamMember struct {
|
||||
UserId string
|
||||
Roles string
|
||||
DeleteAt int64
|
||||
SchemeGuest sql.NullBool
|
||||
SchemeUser sql.NullBool
|
||||
SchemeAdmin sql.NullBool
|
||||
}
|
||||
@@ -44,6 +45,7 @@ func NewTeamMemberFromModel(tm *model.TeamMember) *teamMember {
|
||||
UserId: tm.UserId,
|
||||
Roles: tm.ExplicitRoles,
|
||||
DeleteAt: tm.DeleteAt,
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: tm.SchemeGuest},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: tm.SchemeUser},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: tm.SchemeAdmin},
|
||||
}
|
||||
@@ -54,8 +56,10 @@ type teamMemberWithSchemeRoles struct {
|
||||
UserId string
|
||||
Roles string
|
||||
DeleteAt int64
|
||||
SchemeGuest sql.NullBool
|
||||
SchemeUser sql.NullBool
|
||||
SchemeAdmin sql.NullBool
|
||||
TeamSchemeDefaultGuestRole sql.NullString
|
||||
TeamSchemeDefaultUserRole sql.NullString
|
||||
TeamSchemeDefaultAdminRole sql.NullString
|
||||
}
|
||||
@@ -68,11 +72,16 @@ func (db teamMemberWithSchemeRoles) ToModel() *model.TeamMember {
|
||||
|
||||
// Identify any scheme derived roles that are in "Roles" field due to not yet being migrated, and exclude
|
||||
// them from ExplicitRoles field.
|
||||
schemeGuest := db.SchemeGuest.Valid && db.SchemeGuest.Bool
|
||||
schemeUser := db.SchemeUser.Valid && db.SchemeUser.Bool
|
||||
schemeAdmin := db.SchemeAdmin.Valid && db.SchemeAdmin.Bool
|
||||
for _, role := range strings.Fields(db.Roles) {
|
||||
isImplicit := false
|
||||
if role == model.TEAM_USER_ROLE_ID {
|
||||
if role == model.TEAM_GUEST_ROLE_ID {
|
||||
// We have an implicit role via the system scheme. Override the "schemeGuest" field to true.
|
||||
schemeGuest = true
|
||||
isImplicit = true
|
||||
} else if role == model.TEAM_USER_ROLE_ID {
|
||||
// We have an implicit role via the system scheme. Override the "schemeUser" field to true.
|
||||
schemeUser = true
|
||||
isImplicit = true
|
||||
@@ -91,6 +100,13 @@ func (db teamMemberWithSchemeRoles) ToModel() *model.TeamMember {
|
||||
// Add any scheme derived roles that are not in the Roles field due to being Implicit from the Scheme, and add
|
||||
// them to the Roles field for backwards compatibility reasons.
|
||||
var schemeImpliedRoles []string
|
||||
if db.SchemeGuest.Valid && db.SchemeGuest.Bool {
|
||||
if db.TeamSchemeDefaultGuestRole.Valid && db.TeamSchemeDefaultGuestRole.String != "" {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, db.TeamSchemeDefaultGuestRole.String)
|
||||
} else {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, model.TEAM_GUEST_ROLE_ID)
|
||||
}
|
||||
}
|
||||
if db.SchemeUser.Valid && db.SchemeUser.Bool {
|
||||
if db.TeamSchemeDefaultUserRole.Valid && db.TeamSchemeDefaultUserRole.String != "" {
|
||||
schemeImpliedRoles = append(schemeImpliedRoles, db.TeamSchemeDefaultUserRole.String)
|
||||
@@ -122,6 +138,7 @@ func (db teamMemberWithSchemeRoles) ToModel() *model.TeamMember {
|
||||
UserId: db.UserId,
|
||||
Roles: strings.Join(roles, " "),
|
||||
DeleteAt: db.DeleteAt,
|
||||
SchemeGuest: schemeGuest,
|
||||
SchemeUser: schemeUser,
|
||||
SchemeAdmin: schemeAdmin,
|
||||
ExplicitRoles: strings.Join(explicitRoles, " "),
|
||||
@@ -475,6 +492,7 @@ func (s SqlTeamStore) getTeamMembersWithSchemeSelectQuery() sq.SelectBuilder {
|
||||
return s.getQueryBuilder().
|
||||
Select(
|
||||
"TeamMembers.*",
|
||||
"TeamScheme.DefaultTeamGuestRole TeamSchemeDefaultGuestRole",
|
||||
"TeamScheme.DefaultTeamUserRole TeamSchemeDefaultUserRole",
|
||||
"TeamScheme.DefaultTeamAdminRole TeamSchemeDefaultAdminRole",
|
||||
).
|
||||
@@ -887,11 +905,16 @@ func (s SqlTeamStore) MigrateTeamMembers(fromTeamId string, fromUserId string) s
|
||||
if !member.SchemeUser.Valid {
|
||||
member.SchemeUser = sql.NullBool{Bool: false, Valid: true}
|
||||
}
|
||||
if !member.SchemeGuest.Valid {
|
||||
member.SchemeGuest = sql.NullBool{Bool: false, Valid: true}
|
||||
}
|
||||
for _, role := range roles {
|
||||
if role == model.TEAM_ADMIN_ROLE_ID {
|
||||
member.SchemeAdmin = sql.NullBool{Bool: true, Valid: true}
|
||||
} else if role == model.TEAM_USER_ROLE_ID {
|
||||
member.SchemeUser = sql.NullBool{Bool: true, Valid: true}
|
||||
} else if role == model.TEAM_GUEST_ROLE_ID {
|
||||
member.SchemeGuest = sql.NullBool{Bool: true, Valid: true}
|
||||
} else {
|
||||
newRoles = append(newRoles, role)
|
||||
}
|
||||
@@ -1082,16 +1105,22 @@ func (s SqlTeamStore) GetTeamMembersForExport(userId string) store.StoreChannel
|
||||
return store.Do(func(result *store.StoreResult) {
|
||||
var members []*model.TeamMemberForExport
|
||||
_, err := s.GetReplica().Select(&members, `
|
||||
SELECT
|
||||
TeamMembers.*,
|
||||
Teams.Name as TeamName
|
||||
FROM
|
||||
TeamMembers
|
||||
INNER JOIN
|
||||
Teams ON TeamMembers.TeamId = Teams.Id
|
||||
WHERE
|
||||
TeamMembers.UserId = :UserId
|
||||
AND Teams.DeleteAt = 0`,
|
||||
SELECT
|
||||
TeamMembers.TeamId,
|
||||
TeamMembers.UserId,
|
||||
TeamMembers.Roles,
|
||||
TeamMembers.DeleteAt,
|
||||
(TeamMembers.SchemeGuest IS NOT NULL AND TeamMembers.SchemeGuest) as SchemeGuest,
|
||||
TeamMembers.SchemeUser,
|
||||
TeamMembers.SchemeAdmin,
|
||||
Teams.Name as TeamName
|
||||
FROM
|
||||
TeamMembers
|
||||
INNER JOIN
|
||||
Teams ON TeamMembers.TeamId = Teams.Id
|
||||
WHERE
|
||||
TeamMembers.UserId = :UserId
|
||||
AND Teams.DeleteAt = 0`,
|
||||
map[string]interface{}{"UserId": userId})
|
||||
if err != nil {
|
||||
result.Err = model.NewAppError("SqlTeamStore.GetTeamMembersForExport", "store.sql_team.get_members.app_error", nil, "userId="+userId+" "+err.Error(), http.StatusInternalServerError)
|
||||
|
||||
@@ -28,6 +28,7 @@ func testNewTeamMemberFromModel(t *testing.T) {
|
||||
UserId: model.NewId(),
|
||||
Roles: "team_user team_admin custom_role",
|
||||
DeleteAt: 12345,
|
||||
SchemeGuest: false,
|
||||
SchemeUser: true,
|
||||
SchemeAdmin: true,
|
||||
ExplicitRoles: "custom_role",
|
||||
@@ -38,8 +39,10 @@ func testNewTeamMemberFromModel(t *testing.T) {
|
||||
assert.Equal(t, m.TeamId, db.TeamId)
|
||||
assert.Equal(t, m.UserId, db.UserId)
|
||||
assert.Equal(t, m.DeleteAt, db.DeleteAt)
|
||||
assert.Equal(t, true, db.SchemeGuest.Valid)
|
||||
assert.Equal(t, true, db.SchemeUser.Valid)
|
||||
assert.Equal(t, true, db.SchemeAdmin.Valid)
|
||||
assert.Equal(t, m.SchemeGuest, db.SchemeGuest.Bool)
|
||||
assert.Equal(t, m.SchemeUser, db.SchemeUser.Bool)
|
||||
assert.Equal(t, m.SchemeAdmin, db.SchemeAdmin.Bool)
|
||||
assert.Equal(t, m.ExplicitRoles, db.Roles)
|
||||
@@ -53,8 +56,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
UserId: model.NewId(),
|
||||
Roles: "custom_role",
|
||||
DeleteAt: 12345,
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: true},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -65,6 +70,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
assert.Equal(t, db.UserId, m.UserId)
|
||||
assert.Equal(t, "custom_role team_user team_admin", m.Roles)
|
||||
assert.Equal(t, db.DeleteAt, m.DeleteAt)
|
||||
assert.Equal(t, db.SchemeGuest.Bool, m.SchemeGuest)
|
||||
assert.Equal(t, db.SchemeUser.Bool, m.SchemeUser)
|
||||
assert.Equal(t, db.SchemeAdmin.Bool, m.SchemeAdmin)
|
||||
assert.Equal(t, db.Roles, m.ExplicitRoles)
|
||||
@@ -74,8 +80,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Unmigrated_NoScheme_User", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "team_user",
|
||||
SchemeGuest: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: false, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -83,6 +91,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "team_user", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
@@ -91,8 +100,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Unmigrated_NoScheme_Admin", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "team_user team_admin",
|
||||
SchemeGuest: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: false, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -100,6 +111,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "team_user team_admin", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, true, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
@@ -108,8 +120,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Unmigrated_NoScheme_CustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: false, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -117,6 +131,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "custom_role", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
@@ -125,8 +140,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Unmigrated_NoScheme_UserAndCustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "team_user custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: false, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -134,6 +151,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "team_user custom_role", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
@@ -142,8 +160,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Unmigrated_NoScheme_AdminAndCustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "team_user team_admin custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: false, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -151,6 +171,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "team_user team_admin custom_role", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, true, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
@@ -159,8 +180,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Unmigrated_NoScheme_NoRoles", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "",
|
||||
SchemeGuest: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: false, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: false, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -168,6 +191,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
@@ -177,8 +201,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Migrated_NoScheme_User", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -186,6 +212,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "team_user", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
@@ -194,8 +221,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Migrated_NoScheme_Admin", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: true},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -203,16 +232,39 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "team_user team_admin", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, true, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
})
|
||||
|
||||
t.Run("Migrated_NoScheme_Guest", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "team_guest", m.Roles)
|
||||
assert.Equal(t, true, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
})
|
||||
|
||||
t.Run("Migrated_NoScheme_CustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -220,6 +272,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "custom_role", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
@@ -228,8 +281,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Migrated_NoScheme_UserAndCustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -237,6 +292,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "custom_role team_user", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
@@ -245,8 +301,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Migrated_NoScheme_AdminAndCustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: true},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -254,16 +312,39 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "custom_role team_user team_admin", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, true, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
})
|
||||
|
||||
t.Run("Migrated_NoScheme_GuestAndCustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "custom_role team_guest", m.Roles)
|
||||
assert.Equal(t, true, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
})
|
||||
|
||||
t.Run("Migrated_NoScheme_NoRoles", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: false},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: false},
|
||||
}
|
||||
@@ -271,6 +352,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
@@ -280,8 +362,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Migrated_TeamScheme_User", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: true, String: "tscheme_user"},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
|
||||
}
|
||||
@@ -289,6 +373,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "tscheme_user", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
@@ -297,8 +382,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Migrated_TeamScheme_Admin", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: true},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: true, String: "tscheme_user"},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
|
||||
}
|
||||
@@ -306,16 +393,39 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "tscheme_user tscheme_admin", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, true, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
})
|
||||
|
||||
t.Run("Migrated_TeamScheme_Guest", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: true, String: "tscheme_user"},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
|
||||
}
|
||||
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "tscheme_guest", m.Roles)
|
||||
assert.Equal(t, true, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
})
|
||||
|
||||
t.Run("Migrated_TeamScheme_CustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: true, String: "tscheme_user"},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
|
||||
}
|
||||
@@ -323,6 +433,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "custom_role", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
@@ -331,8 +442,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Migrated_TeamScheme_UserAndCustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: true, String: "tscheme_user"},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
|
||||
}
|
||||
@@ -340,6 +453,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "custom_role tscheme_user", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
@@ -348,8 +462,10 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
t.Run("Migrated_TeamScheme_AdminAndCustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: true},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: true, String: "tscheme_user"},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
|
||||
}
|
||||
@@ -357,16 +473,39 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "custom_role tscheme_user tscheme_admin", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, true, m.SchemeUser)
|
||||
assert.Equal(t, true, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
})
|
||||
|
||||
t.Run("Migrated_TeamScheme_GuestAndCustomRole", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "custom_role",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: true},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: true, String: "tscheme_user"},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
|
||||
}
|
||||
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "custom_role tscheme_guest", m.Roles)
|
||||
assert.Equal(t, true, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "custom_role", m.ExplicitRoles)
|
||||
})
|
||||
|
||||
t.Run("Migrated_TeamScheme_NoRoles", func(t *testing.T) {
|
||||
db := teamMemberWithSchemeRoles{
|
||||
Roles: "",
|
||||
SchemeGuest: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeUser: sql.NullBool{Valid: true, Bool: false},
|
||||
SchemeAdmin: sql.NullBool{Valid: true, Bool: false},
|
||||
TeamSchemeDefaultGuestRole: sql.NullString{Valid: true, String: "tscheme_guest"},
|
||||
TeamSchemeDefaultUserRole: sql.NullString{Valid: true, String: "tscheme_user"},
|
||||
TeamSchemeDefaultAdminRole: sql.NullString{Valid: true, String: "tscheme_admin"},
|
||||
}
|
||||
@@ -374,6 +513,7 @@ func testTeamMemberWithSchemeRolesToModel(t *testing.T) {
|
||||
m := db.ToModel()
|
||||
|
||||
assert.Equal(t, "", m.Roles)
|
||||
assert.Equal(t, false, m.SchemeGuest)
|
||||
assert.Equal(t, false, m.SchemeUser)
|
||||
assert.Equal(t, false, m.SchemeAdmin)
|
||||
assert.Equal(t, "", m.ExplicitRoles)
|
||||
|
||||
@@ -154,6 +154,7 @@ func UpgradeDatabase(sqlStore SqlStore, currentModelVersionString string) error
|
||||
UpgradeDatabaseToVersion59(sqlStore)
|
||||
UpgradeDatabaseToVersion510(sqlStore)
|
||||
UpgradeDatabaseToVersion511(sqlStore)
|
||||
UpgradeDatabaseToVersion512(sqlStore)
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -677,3 +678,16 @@ func UpgradeDatabaseToVersion511(sqlStore SqlStore) {
|
||||
// saveSchemaVersion(sqlStore, VERSION_5_11_0)
|
||||
// }
|
||||
}
|
||||
|
||||
func UpgradeDatabaseToVersion512(sqlStore SqlStore) {
|
||||
// TODO: Uncomment following condition when version 5.12.0 is released
|
||||
// if shouldPerformUpgrade(sqlStore, VERSION_5_11_0, VERSION_5_12_0) {
|
||||
sqlStore.CreateColumnIfNotExistsNoDefault("TeamMembers", "SchemeGuest", "boolean", "boolean")
|
||||
sqlStore.CreateColumnIfNotExistsNoDefault("ChannelMembers", "SchemeGuest", "boolean", "boolean")
|
||||
sqlStore.CreateColumnIfNotExistsNoDefault("Schemes", "DefaultTeamGuestRole", "text", "VARCHAR(64)")
|
||||
sqlStore.CreateColumnIfNotExistsNoDefault("Schemes", "DefaultChannelGuestRole", "text", "VARCHAR(64)")
|
||||
sqlStore.GetMaster().Exec("UPDATE Schemes SET DefaultTeamGuestRole = '', DefaultChannelGuestRole = ''")
|
||||
|
||||
// saveSchemaVersion(sqlStore, VERSION_5_12_0)
|
||||
// }
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user