a4ef8ec6bc
* Initial permissions review infrastructure * Adding more tests cases * Modifying a bit the tests approach and adding more tests * Adding more tests * Adding more tests for permissions * Adding more tests * Adding more permissions tests * Adding more tests * Adding more permission checks * Adding more permissions tests * Adding more permission tests * Adding more tests * Adding subscriptions tests * Adding more permissions tests * Adding tests for read tokens in the files * Update APIs and fix unit tests * Fix linter errors * Auto-assign category id from the database (as expected because is serial/auto_increment integer field) * Revert "Auto-assign category id from the database (as expected because is serial/auto_increment integer field)" This reverts commit 5c98fd76a32f1a7ef6a6258497ec7ac64e034640. * Fixing Category scheme in postgres and MySQL * Removing restriction about the channel_id and add it to all the databases * Moving everything to a new migration * Fix bad merge (?) * Update 000021_fix_categories.up.sql Fix Postgres ALTER COLUMN syntax * Update 000021_fix_categories.down.sql Fix Postgres ALTER COLUMN syntax * Update 000021_fix_categories.up.sql Remove unnecessary, and unsupported MODIFY COLUMNs for SQLite. * Update 000021_fix_categories.up.sql Remove not null from categories.channel_id * Update 000021_fix_categories.down.sql Migrate down removing not null from categories.channel_id * Update 000021_fix_categories.up.sql Fix drop not null on categories.channel_id * Update 000021_fix_categories.down.sql Fix down migration of drop not null from categories.channel_id. * Restore default notification level to debug Co-authored-by: Chen-I Lim <chenilim@gmail.com> Co-authored-by: Chen-I Lim <46905241+chenilim@users.noreply.github.com>
110 lines
2.4 KiB
Go
110 lines
2.4 KiB
Go
package app
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/mattermost/focalboard/server/model"
|
|
"github.com/mattermost/focalboard/server/utils"
|
|
)
|
|
|
|
var (
|
|
ErrorCategoryPermissionDenied = errors.New("category doesn't belong to user")
|
|
ErrorCategoryDeleted = errors.New("category is deleted")
|
|
ErrorInvalidCategory = errors.New("invalid category")
|
|
)
|
|
|
|
func (a *App) CreateCategory(category *model.Category) (*model.Category, error) {
|
|
category.Hydrate()
|
|
if err := category.IsValid(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := a.store.CreateCategory(*category); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
createdCategory, err := a.store.GetCategory(category.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
go func() {
|
|
a.wsAdapter.BroadcastCategoryChange(*createdCategory)
|
|
}()
|
|
|
|
return createdCategory, nil
|
|
}
|
|
|
|
func (a *App) UpdateCategory(category *model.Category) (*model.Category, error) {
|
|
// verify if category belongs to the user
|
|
existingCategory, err := a.store.GetCategory(category.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if existingCategory.DeleteAt != 0 {
|
|
return nil, ErrorCategoryDeleted
|
|
}
|
|
|
|
if existingCategory.UserID != category.UserID {
|
|
return nil, ErrorCategoryPermissionDenied
|
|
}
|
|
|
|
category.UpdateAt = utils.GetMillis()
|
|
if err = category.IsValid(); err != nil {
|
|
return nil, err
|
|
}
|
|
if err = a.store.UpdateCategory(*category); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
updatedCategory, err := a.store.GetCategory(category.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
go func() {
|
|
a.wsAdapter.BroadcastCategoryChange(*updatedCategory)
|
|
}()
|
|
|
|
return updatedCategory, nil
|
|
}
|
|
|
|
func (a *App) DeleteCategory(categoryID, userID, teamID string) (*model.Category, error) {
|
|
existingCategory, err := a.store.GetCategory(categoryID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// category is already deleted. This avoids
|
|
// overriding the original deleted at timestamp
|
|
if existingCategory.DeleteAt != 0 {
|
|
return existingCategory, nil
|
|
}
|
|
|
|
// verify if category belongs to the user
|
|
if existingCategory.UserID != userID {
|
|
return nil, ErrorCategoryPermissionDenied
|
|
}
|
|
|
|
// verify if category belongs to the team
|
|
if existingCategory.TeamID != teamID {
|
|
return nil, ErrorInvalidCategory
|
|
}
|
|
|
|
if err = a.store.DeleteCategory(categoryID, userID, teamID); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
deletedCategory, err := a.store.GetCategory(categoryID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
go func() {
|
|
a.wsAdapter.BroadcastCategoryChange(*deletedCategory)
|
|
}()
|
|
|
|
return deletedCategory, nil
|
|
}
|