diff --git a/modules/structs/roles.go b/modules/structs/roles.go index cee58aa..b7b8b05 100644 --- a/modules/structs/roles.go +++ b/modules/structs/roles.go @@ -6,7 +6,7 @@ import ( type Role struct { Id string - Master bool `gorm:"type:bool"` // this reflects the role that has all rights + Master bool // this reflects the role that has all rights DisplayName string Description string SortingOrder int diff --git a/modules/utils/globals.go b/modules/utils/globals.go index 0b8103f..a79ed48 100644 --- a/modules/utils/globals.go +++ b/modules/utils/globals.go @@ -50,6 +50,7 @@ const ( SentCmdAdminAreaNewRoleCreated = 19 SentCmdAdminAreaRoleUpdated = 20 SentCmdAdminAreaUpdateRoleSortingOrder = 21 + SentCmdAdminAreaRoleDeleted = 22 ) // commands received from web clients @@ -63,6 +64,7 @@ const ( ReceivedCmdAdminAreaCreateNewRole = 7 ReceivedCmdAdminAreaUpdateRole = 8 ReceivedCmdAdminAreaUpdateRoleSortingOrder = 9 + ReceivedCmdAdminAreaDeleteRole = 10 ) const ( diff --git a/socketclients/socketclients.go b/socketclients/socketclients.go index 1315c43..0e80eee 100644 --- a/socketclients/socketclients.go +++ b/socketclients/socketclients.go @@ -473,7 +473,7 @@ func AdminAreaUpdateRole(sessionId string, body map[string]interface{}) { }) } -func MoveRoleToSortingOrder(body map[string]interface{}) { +func AdminAreaMoveRoleToSortingOrder(body map[string]interface{}) { roleId := body["RoleId"].(string) direction := int(body["Direction"].(float64)) @@ -531,3 +531,24 @@ func MoveRoleToSortingOrder(body map[string]interface{}) { Body: body, }) } + +func AdminAreaDeleteRole(body map[string]interface{}) { + roleId := body["RoleId"].(string) + + var role structs.Role + + database.DB.Where("id = ?", roleId).First(&role) + + if err := database.DB.Model(&structs.Role{}).Where("sorting_order > ?", role.SortingOrder).Update("sorting_order", gorm.Expr("sorting_order - 1")).Error; err != nil { + log.Error().Msgf("Failed to update role sorting order after delete role %s", err.Error()) + return + } + + database.DB.Where("id = ?", roleId).Delete(&structs.Role{}) + database.DB.Where("role_id = ?", roleId).Delete(&structs.RolePermission{}) + + BroadcastMessage(structs.SendSocketMessage{ + Cmd: utils.SentCmdAdminAreaRoleDeleted, + Body: body, + }) +} diff --git a/socketserver/hub.go b/socketserver/hub.go index 2438c39..f4dc93d 100644 --- a/socketserver/hub.go +++ b/socketserver/hub.go @@ -219,7 +219,10 @@ func RunHub() { socketclients.AdminAreaUpdateRole(data.Conn.Locals("sessionId").(string), receivedMessage.Body) break case utils.ReceivedCmdAdminAreaUpdateRoleSortingOrder: - socketclients.MoveRoleToSortingOrder(receivedMessage.Body) + socketclients.AdminAreaMoveRoleToSortingOrder(receivedMessage.Body) + break + case utils.ReceivedCmdAdminAreaDeleteRole: + socketclients.AdminAreaDeleteRole(receivedMessage.Body) break default: log.Error().Msgf("Received unknown message: %v", receivedMessage)