role sorting order

main
alex 2023-06-20 23:23:43 +02:00
parent 866bba7f07
commit 8ba858802b
3 changed files with 94 additions and 29 deletions

View File

@ -29,38 +29,40 @@ const (
// commands sent to web clients
const (
SentCmdInitUserSocketConnection = 1
SentCmdUpdateConnectedUsers = 2
SentCmdNewGroupTaskStarted = 3
SentCmdNewGroupTaskStep = 4
SentCmdUpdateGroupTaskStep = 5
SentCmdUpdateGroupTask = 6
SentCmdReloadingGroupTasks = 7
SentCmdGroupTasksReloaded = 8
SentCmdUpdateUserSessions = 9
SentCmdUpdateAllUsersUserAvatar = 10
SentCmdNewScanner = 11
SentCmdDeleteScanner = 12
SentCmdUpdateScannerUsedBy = 13
SentCmdScanResult = 14
SentCmdUpdateScannerLastUsed = 15
SentCmdTaskLocked = 16
SentCmdTaskUnlocked = 17
SentCmdUserProfileUpdated = 18
SentCmdAdminAreaNewRoleCreated = 19
SentCmdAdminAreaRoleUpdated = 20
SentCmdInitUserSocketConnection = 1
SentCmdUpdateConnectedUsers = 2
SentCmdNewGroupTaskStarted = 3
SentCmdNewGroupTaskStep = 4
SentCmdUpdateGroupTaskStep = 5
SentCmdUpdateGroupTask = 6
SentCmdReloadingGroupTasks = 7
SentCmdGroupTasksReloaded = 8
SentCmdUpdateUserSessions = 9
SentCmdUpdateAllUsersUserAvatar = 10
SentCmdNewScanner = 11
SentCmdDeleteScanner = 12
SentCmdUpdateScannerUsedBy = 13
SentCmdScanResult = 14
SentCmdUpdateScannerLastUsed = 15
SentCmdTaskLocked = 16
SentCmdTaskUnlocked = 17
SentCmdUserProfileUpdated = 18
SentCmdAdminAreaNewRoleCreated = 19
SentCmdAdminAreaRoleUpdated = 20
SentCmdAdminAreaUpdateRoleSortingOrder = 21
)
// commands received from web clients
const (
ReceivedCmdStartGroupTasks = 1
ReceivedCmdTaskFailedTryAgainRunTaskStep = 2
ReceivedCmdTaskContinueTaskStep = 3
ReceivedCmdReloadGroupTasks = 4
ReceivedCmdTaskLocking = 5
ReceivedCmdUpdateUserProfile = 6
ReceivedCmdAdminAreaCreateNewRole = 7
ReceivedCmdAdminAreaUpdateRole = 8
ReceivedCmdStartGroupTasks = 1
ReceivedCmdTaskFailedTryAgainRunTaskStep = 2
ReceivedCmdTaskContinueTaskStep = 3
ReceivedCmdReloadGroupTasks = 4
ReceivedCmdTaskLocking = 5
ReceivedCmdUpdateUserProfile = 6
ReceivedCmdAdminAreaCreateNewRole = 7
ReceivedCmdAdminAreaUpdateRole = 8
ReceivedCmdAdminAreaUpdateRoleSortingOrder = 9
)
const (

View File

@ -11,6 +11,7 @@ import (
"github.com/gofiber/websocket/v2"
"github.com/rs/zerolog/log"
"golang.org/x/crypto/bcrypt"
"gorm.io/gorm"
)
func BroadcastMessage(sendSocketMessage structs.SendSocketMessage) {
@ -298,7 +299,7 @@ func UpdateUserProfile(conn *websocket.Conn, changes map[string]interface{}) {
func isValueLenValid(value string, min int, max int) bool {
l := len(value)
return l > min && l < max
return l >= min && l <= max
}
func GetAllRoles() []structs.Role {
@ -471,3 +472,62 @@ func AdminAreaUpdateRole(sessionId string, body map[string]interface{}) {
},
})
}
func MoveRoleToSortingOrder(body map[string]interface{}) {
roleId := body["RoleId"].(string)
direction := int(body["Direction"].(float64))
var role structs.Role
if err := database.DB.First(&role, "id = ?", roleId).Error; err != nil {
log.Error().Msgf("Failed to get role %s", err.Error())
return
}
currentSortingOrder := role.SortingOrder
var newSortingOrder int
if direction == 1 {
newSortingOrder = currentSortingOrder + 1
log.Debug().Msgf("up %v %v", newSortingOrder, currentSortingOrder)
if newSortingOrder > database.GetRoleSortingOrder()-1 {
return
}
} else {
newSortingOrder = currentSortingOrder - 1
if newSortingOrder < 0 {
return
}
}
// If the new sorting order number is smaller than the current sorting order number,
// increase the sorting order numbers of all roles between the new and current sorting order by 1
if newSortingOrder < currentSortingOrder {
if err := database.DB.Model(&structs.Role{}).Where("sorting_order >= ? AND sorting_order < ?", newSortingOrder, currentSortingOrder).Update("sorting_order", gorm.Expr("sorting_order + 1")).Error; err != nil {
log.Error().Msgf("Failed to update sorting order upwards %s", err.Error())
return
}
} else if newSortingOrder > currentSortingOrder {
// If the new sorting order number is larger than the current sorting order number,
// decrease the sorting order numbers of all roles between the current and new sorting order by 1.
if err := database.DB.Model(&structs.Role{}).Where("sorting_order > ? AND sorting_order <= ?", currentSortingOrder, newSortingOrder).Update("sorting_order", gorm.Expr("sorting_order - 1")).Error; err != nil {
log.Error().Msgf("Failed to update sorting order downwards %s", err.Error())
return
}
}
// Update the sorting order number of the moved role
if err := database.DB.Model(&role).Update("sorting_order", newSortingOrder).Error; err != nil {
log.Debug().Msgf("Failed to update sorting order %s", err.Error())
return
}
// TODO: check permissions
BroadcastMessage(structs.SendSocketMessage{
Cmd: utils.SentCmdAdminAreaUpdateRoleSortingOrder,
Body: body,
})
}

View File

@ -218,6 +218,9 @@ func RunHub() {
case utils.ReceivedCmdAdminAreaUpdateRole:
socketclients.AdminAreaUpdateRole(data.Conn.Locals("sessionId").(string), receivedMessage.Body)
break
case utils.ReceivedCmdAdminAreaUpdateRoleSortingOrder:
socketclients.MoveRoleToSortingOrder(receivedMessage.Body)
break
default:
log.Error().Msgf("Received unknown message: %v", receivedMessage)
break