Skip to content

Commit 0192d52

Browse files
PermissionManageOauth removal impact (mattermost#35554)
* Restore manage oauth permission Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Fix migration test lint assertion Co-authored-by: Nick Misasi <nick13misasi@gmail.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
1 parent 0b9c733 commit 0192d52

6 files changed

Lines changed: 79 additions & 1 deletion

File tree

server/channels/app/permissions_migrations.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1284,6 +1284,15 @@ func (a *App) getAddSecureConnectionManagerPermissionsMigration() (permissionsMa
12841284
}, nil
12851285
}
12861286

1287+
func (a *App) getRestoreManageOAuthPermissionMigration() (permissionsMap, error) {
1288+
return permissionsMap{
1289+
permissionTransformation{
1290+
On: isExactRole(model.SystemAdminRoleId),
1291+
Add: []string{model.PermissionManageOAuth.Id},
1292+
},
1293+
}, nil
1294+
}
1295+
12871296
// DoPermissionsMigrations execute all the permissions migrations need by the current version.
12881297
func (a *App) DoPermissionsMigrations() error {
12891298
return a.Srv().doPermissionsMigrations()
@@ -1343,6 +1352,7 @@ func (s *Server) doPermissionsMigrations() error {
13431352
{Key: model.MigrationKeyAddChannelAutoTranslationPermissions, Migration: a.getAddChannelAutoTranslationPermissionMigration},
13441353
{Key: model.MigrationKeyAddSharedChannelManagerPermissions, Migration: a.getAddSharedChannelManagerPermissionsMigration},
13451354
{Key: model.MigrationKeyAddSecureConnectionManagerPermissions, Migration: a.getAddSecureConnectionManagerPermissionsMigration},
1355+
{Key: model.MigrationKeyRestoreManageOAuthPermission, Migration: a.getRestoreManageOAuthPermissionMigration},
13461356
}
13471357

13481358
roles, err := s.Store().Role().GetAll()

server/channels/app/permissions_migrations_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,64 @@ import (
77
"testing"
88

99
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/mock"
11+
"github.com/stretchr/testify/require"
1012

1113
"github.com/mattermost/mattermost/server/public/model"
1214
"github.com/mattermost/mattermost/server/v8/channels/store/sqlstore"
15+
"github.com/mattermost/mattermost/server/v8/channels/store/storetest/mocks"
1316
)
1417

18+
func TestRestoreManageOAuthPermissionMigration(t *testing.T) {
19+
mainHelper.Parallel(t)
20+
21+
th := SetupWithStoreMock(t)
22+
23+
migrationMap, err := th.App.getRestoreManageOAuthPermissionMigration()
24+
require.NoError(t, err)
25+
26+
systemAdminRole := &model.Role{
27+
Name: model.SystemAdminRoleId,
28+
Permissions: []string{model.PermissionManageSystemWideOAuth.Id},
29+
}
30+
systemUserRole := &model.Role{
31+
Name: model.SystemUserRoleId,
32+
Permissions: []string{model.PermissionCreateDirectChannel.Id},
33+
}
34+
roles := []*model.Role{systemAdminRole, systemUserRole}
35+
36+
mockStore := th.App.Srv().Store().(*mocks.Store)
37+
roleStore := mocks.RoleStore{}
38+
systemStore := mocks.SystemStore{}
39+
40+
mockStore.On("Role").Return(&roleStore)
41+
mockStore.On("System").Return(&systemStore)
42+
43+
systemStore.On("GetByName", model.MigrationKeyRestoreManageOAuthPermission).
44+
Return(nil, model.NewAppError("test", "missing", nil, "", 404)).Once()
45+
systemStore.On("GetByName", model.MigrationKeyRestoreManageOAuthPermission).
46+
Return(&model.System{Name: model.MigrationKeyRestoreManageOAuthPermission, Value: "true"}, nil).Once()
47+
systemStore.On("SaveOrUpdate", mock.MatchedBy(func(system *model.System) bool {
48+
return system.Name == model.MigrationKeyRestoreManageOAuthPermission && system.Value == "true"
49+
})).Return(nil).Once()
50+
51+
roleStore.On("Save", mock.AnythingOfType("*model.Role")).
52+
Return(func(role *model.Role) *model.Role { return role }, nil).Twice()
53+
54+
appErr := th.App.Srv().doPermissionsMigration(model.MigrationKeyRestoreManageOAuthPermission, migrationMap, roles)
55+
require.Nil(t, appErr)
56+
assert.Contains(t, systemAdminRole.Permissions, model.PermissionManageOAuth.Id)
57+
assert.NotContains(t, systemUserRole.Permissions, model.PermissionManageOAuth.Id)
58+
assert.Len(t, systemAdminRole.Permissions, 2)
59+
60+
appErr = th.App.Srv().doPermissionsMigration(model.MigrationKeyRestoreManageOAuthPermission, migrationMap, roles)
61+
require.Nil(t, appErr)
62+
assert.Len(t, systemAdminRole.Permissions, 2)
63+
64+
roleStore.AssertNumberOfCalls(t, "Save", 2)
65+
systemStore.AssertNumberOfCalls(t, "SaveOrUpdate", 1)
66+
}
67+
1568
func TestApplyPermissionsMap(t *testing.T) {
1669
mainHelper.Parallel(t)
1770
tt := []struct {

server/channels/testlib/store.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ func GetMockStoreForSetupFunctions() *mocks.Store {
9595
systemStore.On("GetByName", model.MigrationKeyAddChannelBannerPermissions).Return(&model.System{Name: model.MigrationKeyAddChannelBannerPermissions, Value: "true"}, nil)
9696
systemStore.On("GetByName", model.MigrationKeyAddChannelAccessRulesPermission).Return(&model.System{Name: model.MigrationKeyAddChannelAccessRulesPermission, Value: "true"}, nil)
9797
systemStore.On("GetByName", model.MigrationKeyAddChannelAutoTranslationPermissions).Return(&model.System{Name: model.MigrationKeyAddChannelAutoTranslationPermissions, Value: "true"}, nil)
98+
systemStore.On("GetByName", model.MigrationKeyRestoreManageOAuthPermission).Return(&model.System{Name: model.MigrationKeyRestoreManageOAuthPermission, Value: "true"}, nil)
9899

99100
systemStore.On("InsertIfExists", mock.AnythingOfType("*model.System")).Return(&model.System{}, nil).Once()
100101
systemStore.On("Save", mock.AnythingOfType("*model.System")).Return(nil)

server/public/model/migration.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,5 @@ const (
6060
MigrationKeyAddChannelAutoTranslationPermissions = "add_channel_auto_translation_permissions"
6161
MigrationKeyAddSharedChannelManagerPermissions = "shared_channel_manager_permissions"
6262
MigrationKeyAddSecureConnectionManagerPermissions = "secure_connection_manager_permissions"
63+
MigrationKeyRestoreManageOAuthPermission = "restore_manage_oauth_permission"
6364
)

server/public/model/permission.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2460,6 +2460,7 @@ func initializePermissions() {
24602460
PermissionReadOtherUsersTeams,
24612461
PermissionGetPublicLink,
24622462
PermissionManageSystemWideOAuth,
2463+
PermissionManageOAuth,
24632464
PermissionCreateTeam,
24642465
PermissionListUsersWithoutTeam,
24652466
PermissionCreateUserAccessToken,
@@ -2612,7 +2613,6 @@ func initializePermissions() {
26122613
PermissionManageIncomingWebhooks,
26132614
PermissionManageOutgoingWebhooks,
26142615
PermissionManageSlashCommands,
2615-
PermissionManageOAuth,
26162616
PermissionManageEmojis,
26172617
PermissionManageOthersEmojis,
26182618
PermissionSysconsoleReadAuthentication,

server/public/model/role_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,4 +341,17 @@ func TestMakeDefaultRolesContainsNewManagerRoles(t *testing.T) {
341341
assert.True(t, slices.Contains(NewSystemRoleIDs, SecureConnectionManagerRoleId),
342342
"secure_connection_manager should be in NewSystemRoleIDs")
343343
})
344+
345+
t.Run("system_admin includes manage_oauth by default", func(t *testing.T) {
346+
role, ok := roles[SystemAdminRoleId]
347+
require.True(t, ok, "system_admin role should exist in MakeDefaultRoles")
348+
assert.True(t, slices.Contains(role.Permissions, PermissionManageOAuth.Id),
349+
"system_admin should include manage_oauth")
350+
assert.True(t, slices.ContainsFunc(AllPermissions, func(permission *Permission) bool {
351+
return permission.Id == PermissionManageOAuth.Id
352+
}), "manage_oauth should be part of AllPermissions")
353+
assert.False(t, slices.ContainsFunc(DeprecatedPermissions, func(permission *Permission) bool {
354+
return permission.Id == PermissionManageOAuth.Id
355+
}), "manage_oauth should not remain deprecated")
356+
})
344357
}

0 commit comments

Comments
 (0)