MM-38150 Adding playbooks permissions (#19096)
* Add playbooks related permissions. * Add RolesGrantPermission to pluginapi * Fixing scopes. * New defaults. * Fix defaults * Fix tests. * Fix migration. * More test and migration fixes. * Need to add everything to system admin too. * Move to 63 * Feedback fixes. * Fix system manager editing playbook permissions.
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
129f0aabd3
Коммит
5ec78546e2
@@ -269,6 +269,38 @@ func createDefaultRoles(ss store.Store) {
|
||||
model.PermissionCreatePost.Id,
|
||||
},
|
||||
})
|
||||
|
||||
ss.Role().Save(&model.Role{
|
||||
Name: model.PlaybookAdminRoleId,
|
||||
DisplayName: model.PlaybookAdminRoleId,
|
||||
Permissions: []string{
|
||||
model.PermissionPrivatePlaybookManageMembers.Id,
|
||||
},
|
||||
})
|
||||
|
||||
ss.Role().Save(&model.Role{
|
||||
Name: model.PlaybookMemberRoleId,
|
||||
DisplayName: model.PlaybookMemberRoleId,
|
||||
Permissions: []string{
|
||||
model.PermissionPrivatePlaybookManageMembers.Id,
|
||||
},
|
||||
})
|
||||
|
||||
ss.Role().Save(&model.Role{
|
||||
Name: model.RunAdminRoleId,
|
||||
DisplayName: model.RunAdminRoleId,
|
||||
Permissions: []string{
|
||||
model.PermissionRunManageMembers.Id,
|
||||
},
|
||||
})
|
||||
|
||||
ss.Role().Save(&model.Role{
|
||||
Name: model.RunMemberRoleId,
|
||||
DisplayName: model.RunMemberRoleId,
|
||||
Permissions: []string{
|
||||
model.PermissionRunManageMembers.Id,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func createScheme(ss store.Store) *model.Scheme {
|
||||
|
||||
@@ -34,6 +34,10 @@ func newSqlSchemeStore(sqlStore *SqlStore) store.SchemeStore {
|
||||
table.ColMap("DefaultChannelAdminRole").SetMaxSize(64)
|
||||
table.ColMap("DefaultChannelUserRole").SetMaxSize(64)
|
||||
table.ColMap("DefaultChannelGuestRole").SetMaxSize(64)
|
||||
table.ColMap("DefaultPlaybookAdminRole").SetMaxSize(64).SetDefaultConstraint(model.NewString(""))
|
||||
table.ColMap("DefaultPlaybookMemberRole").SetMaxSize(64).SetDefaultConstraint(model.NewString(""))
|
||||
table.ColMap("DefaultRunAdminRole").SetMaxSize(64).SetDefaultConstraint(model.NewString(""))
|
||||
table.ColMap("DefaultRunMemberRole").SetMaxSize(64).SetDefaultConstraint(model.NewString(""))
|
||||
}
|
||||
|
||||
return s
|
||||
@@ -72,7 +76,8 @@ func (s *SqlSchemeStore) Save(scheme *model.Scheme) (*model.Scheme, error) {
|
||||
res, err := s.GetMasterX().NamedExec(`UPDATE Schemes
|
||||
SET UpdateAt=:UpdateAt, CreateAt=:CreateAt, DeleteAt=:DeleteAt, Name=:Name, DisplayName=:DisplayName, Description=:Description, Scope=:Scope,
|
||||
DefaultTeamAdminRole=:DefaultTeamAdminRole, DefaultTeamUserRole=:DefaultTeamUserRole, DefaultTeamGuestRole=:DefaultTeamGuestRole,
|
||||
DefaultChannelAdminRole=:DefaultChannelAdminRole, DefaultChannelUserRole=:DefaultChannelUserRole, DefaultChannelGuestRole=:DefaultChannelGuestRole
|
||||
DefaultChannelAdminRole=:DefaultChannelAdminRole, DefaultChannelUserRole=:DefaultChannelUserRole, DefaultChannelGuestRole=:DefaultChannelGuestRole,
|
||||
DefaultPlaybookMemberRole=:DefaultPlaybookMemberRole, DefaultPlaybookAdminRole=:DefaultPlaybookAdminRole, DefaultRunMemberRole=:DefaultRunMemberRole, DefaultRunAdminRole=:DefaultRunAdminRole
|
||||
WHERE Id=:Id`, scheme)
|
||||
|
||||
if err != nil {
|
||||
@@ -92,7 +97,18 @@ func (s *SqlSchemeStore) Save(scheme *model.Scheme) (*model.Scheme, error) {
|
||||
|
||||
func (s *SqlSchemeStore) createScheme(scheme *model.Scheme, transaction *sqlxTxWrapper) (*model.Scheme, error) {
|
||||
// Fetch the default system scheme roles to populate default permissions.
|
||||
defaultRoleNames := []string{model.TeamAdminRoleId, model.TeamUserRoleId, model.TeamGuestRoleId, model.ChannelAdminRoleId, model.ChannelUserRoleId, model.ChannelGuestRoleId}
|
||||
defaultRoleNames := []string{
|
||||
model.TeamAdminRoleId,
|
||||
model.TeamUserRoleId,
|
||||
model.TeamGuestRoleId,
|
||||
model.ChannelAdminRoleId,
|
||||
model.ChannelUserRoleId,
|
||||
model.ChannelGuestRoleId,
|
||||
model.PlaybookAdminRoleId,
|
||||
model.PlaybookMemberRoleId,
|
||||
model.RunAdminRoleId,
|
||||
model.RunMemberRoleId,
|
||||
}
|
||||
defaultRoles := make(map[string]*model.Role)
|
||||
roles, err := s.SqlStore.Role().GetByNames(defaultRoleNames)
|
||||
if err != nil {
|
||||
@@ -100,23 +116,10 @@ func (s *SqlSchemeStore) createScheme(scheme *model.Scheme, transaction *sqlxTxW
|
||||
}
|
||||
|
||||
for _, role := range roles {
|
||||
switch role.Name {
|
||||
case model.TeamAdminRoleId:
|
||||
defaultRoles[model.TeamAdminRoleId] = role
|
||||
case model.TeamUserRoleId:
|
||||
defaultRoles[model.TeamUserRoleId] = role
|
||||
case model.TeamGuestRoleId:
|
||||
defaultRoles[model.TeamGuestRoleId] = role
|
||||
case model.ChannelAdminRoleId:
|
||||
defaultRoles[model.ChannelAdminRoleId] = role
|
||||
case model.ChannelUserRoleId:
|
||||
defaultRoles[model.ChannelUserRoleId] = role
|
||||
case model.ChannelGuestRoleId:
|
||||
defaultRoles[model.ChannelGuestRoleId] = role
|
||||
}
|
||||
defaultRoles[role.Name] = role
|
||||
}
|
||||
|
||||
if len(defaultRoles) != 6 {
|
||||
if len(defaultRoles) != len(defaultRoleNames) {
|
||||
return nil, errors.New("createScheme: unable to retrieve default scheme roles")
|
||||
}
|
||||
|
||||
@@ -163,6 +166,58 @@ func (s *SqlSchemeStore) createScheme(scheme *model.Scheme, transaction *sqlxTxW
|
||||
return nil, err
|
||||
}
|
||||
scheme.DefaultTeamGuestRole = savedRole.Name
|
||||
|
||||
// playbook admin role
|
||||
playbookAdminRole := &model.Role{
|
||||
Name: model.NewId(),
|
||||
DisplayName: fmt.Sprintf("Playbook Admin Role for Scheme %s", scheme.Name),
|
||||
Permissions: defaultRoles[model.PlaybookAdminRoleId].Permissions,
|
||||
SchemeManaged: true,
|
||||
}
|
||||
savedRole, err = s.SqlStore.Role().(*SqlRoleStore).createRole(playbookAdminRole, transaction)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
scheme.DefaultPlaybookAdminRole = savedRole.Name
|
||||
|
||||
// playbook member role
|
||||
playbookMemberRole := &model.Role{
|
||||
Name: model.NewId(),
|
||||
DisplayName: fmt.Sprintf("Playbook Member Role for Scheme %s", scheme.Name),
|
||||
Permissions: defaultRoles[model.PlaybookMemberRoleId].Permissions,
|
||||
SchemeManaged: true,
|
||||
}
|
||||
savedRole, err = s.SqlStore.Role().(*SqlRoleStore).createRole(playbookMemberRole, transaction)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
scheme.DefaultPlaybookMemberRole = savedRole.Name
|
||||
|
||||
// run admin role
|
||||
runAdminRole := &model.Role{
|
||||
Name: model.NewId(),
|
||||
DisplayName: fmt.Sprintf("Run Admin Role for Scheme %s", scheme.Name),
|
||||
Permissions: defaultRoles[model.RunAdminRoleId].Permissions,
|
||||
SchemeManaged: true,
|
||||
}
|
||||
savedRole, err = s.SqlStore.Role().(*SqlRoleStore).createRole(runAdminRole, transaction)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
scheme.DefaultRunAdminRole = savedRole.Name
|
||||
|
||||
// run member role
|
||||
runMemberRole := &model.Role{
|
||||
Name: model.NewId(),
|
||||
DisplayName: fmt.Sprintf("Run Member Role for Scheme %s", scheme.Name),
|
||||
Permissions: defaultRoles[model.RunMemberRoleId].Permissions,
|
||||
SchemeManaged: true,
|
||||
}
|
||||
savedRole, err = s.SqlStore.Role().(*SqlRoleStore).createRole(runMemberRole, transaction)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
scheme.DefaultRunMemberRole = savedRole.Name
|
||||
}
|
||||
|
||||
if scheme.Scope == model.SchemeScopeTeam || scheme.Scope == model.SchemeScopeChannel {
|
||||
@@ -234,9 +289,9 @@ func (s *SqlSchemeStore) createScheme(scheme *model.Scheme, transaction *sqlxTxW
|
||||
}
|
||||
|
||||
if _, err := transaction.NamedExec(`INSERT INTO Schemes
|
||||
(Id, Name, DisplayName, Description, Scope, DefaultTeamAdminRole, DefaultTeamUserRole, DefaultTeamGuestRole, DefaultChannelAdminRole, DefaultChannelUserRole, DefaultChannelGuestRole, CreateAt, UpdateAt, DeleteAt)
|
||||
(Id, Name, DisplayName, Description, Scope, DefaultTeamAdminRole, DefaultTeamUserRole, DefaultTeamGuestRole, DefaultChannelAdminRole, DefaultChannelUserRole, DefaultChannelGuestRole, CreateAt, UpdateAt, DeleteAt, DefaultPlaybookAdminRole, DefaultPlaybookMemberRole, DefaultRunAdminRole, DefaultRunMemberRole)
|
||||
VALUES
|
||||
(:Id, :Name, :DisplayName, :Description, :Scope, :DefaultTeamAdminRole, :DefaultTeamUserRole, :DefaultTeamGuestRole, :DefaultChannelAdminRole, :DefaultChannelUserRole, :DefaultChannelGuestRole, :CreateAt, :UpdateAt, :DeleteAt)`, scheme); err != nil {
|
||||
(:Id, :Name, :DisplayName, :Description, :Scope, :DefaultTeamAdminRole, :DefaultTeamUserRole, :DefaultTeamGuestRole, :DefaultChannelAdminRole, :DefaultChannelUserRole, :DefaultChannelGuestRole, :CreateAt, :UpdateAt, :DeleteAt, :DefaultPlaybookAdminRole, :DefaultPlaybookMemberRole, :DefaultRunAdminRole, :DefaultRunMemberRole)`, scheme); err != nil {
|
||||
return nil, errors.Wrap(err, "failed to save Scheme")
|
||||
}
|
||||
|
||||
@@ -309,6 +364,13 @@ func (s *SqlSchemeStore) Delete(schemeId string) (*model.Scheme, error) {
|
||||
if scheme.Scope == model.SchemeScopeTeam {
|
||||
roleNames = append(roleNames, scheme.DefaultTeamGuestRole, scheme.DefaultTeamUserRole, scheme.DefaultTeamAdminRole)
|
||||
}
|
||||
if scheme.Scope == model.SchemeScopePlaybook {
|
||||
roleNames = append(roleNames, scheme.DefaultPlaybookAdminRole, scheme.DefaultPlaybookMemberRole)
|
||||
}
|
||||
|
||||
if scheme.Scope == model.SchemeScopeRun {
|
||||
roleNames = append(roleNames, scheme.DefaultRunAdminRole, scheme.DefaultRunMemberRole)
|
||||
}
|
||||
|
||||
time := model.GetMillis()
|
||||
|
||||
|
||||
@@ -1421,6 +1421,11 @@ func upgradeDatabaseToVersion630(sqlStore *SqlStore) {
|
||||
// TODO: uncomment when the time arrive to upgrade the DB for 6.3
|
||||
// if shouldPerformUpgrade(sqlStore, Version620, Version630) {
|
||||
|
||||
sqlStore.CreateColumnIfNotExists("Schemes", "DefaultPlaybookAdminRole", "VARCHAR(64)", "VARCHAR(64)", "")
|
||||
sqlStore.CreateColumnIfNotExists("Schemes", "DefaultPlaybookMemberRole", "VARCHAR(64)", "VARCHAR(64)", "")
|
||||
sqlStore.CreateColumnIfNotExists("Schemes", "DefaultRunAdminRole", "VARCHAR(64)", "VARCHAR(64)", "")
|
||||
sqlStore.CreateColumnIfNotExists("Schemes", "DefaultRunMemberRole", "VARCHAR(64)", "VARCHAR(64)", "")
|
||||
|
||||
// saveSchemaVersion(sqlStore, Version630)
|
||||
// }
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user