add CRUD page menu

This commit is contained in:
2026-07-03 13:48:33 +07:00
parent a4b0abf556
commit 63c95b581a
3 changed files with 39 additions and 7 deletions

No files matched your search

+12 -7
View File
@@ -9,13 +9,14 @@ type RolePermissionModel struct {
} }
type RolePageModel struct { type RolePageModel struct {
ID string `db:"id"` ID string `db:"id"`
Name string `db:"name"` Name string `db:"name"`
Icon sql.NullString `db:"icon"` Icon sql.NullString `db:"icon"`
Url sql.NullString `db:"url"` Url sql.NullString `db:"url"`
Level int `db:"level"` Level int `db:"level"`
Sort int `db:"sort"` Sort int `db:"sort"`
ParentId sql.NullString `db:"parent"` ParentId sql.NullString `db:"parent"`
Permission RolePagePermissionModel
} }
type RoleUserModel struct { type RoleUserModel struct {
@@ -36,4 +37,8 @@ type RolePagePermissionModel struct {
ID string `db:"id"` ID string `db:"id"`
IdPermission string `db:"id_permission"` IdPermission string `db:"id_permission"`
IdPage string `db:"id_page"` IdPage string `db:"id_page"`
Create bool `db:"create"`
Read bool `db:"read"`
Update bool `db:"update"`
Delete bool `db:"delete"`
} }
+12
View File
@@ -170,12 +170,14 @@ func (r accessRepo) GetAvailablePageByKeycloakId(c context.Context, keycloakId s
} }
var pageIds []string var pageIds []string
mapPagePermission := make(map[string]RolePagePermissionModel)
fetchPagePermission, err := r.getPageIdsByPermissionIds(c, dbconn, permissionIds) fetchPagePermission, err := r.getPageIdsByPermissionIds(c, dbconn, permissionIds)
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, pg := range fetchPagePermission { for _, pg := range fetchPagePermission {
pageIds = append(pageIds, pg.IdPage) pageIds = append(pageIds, pg.IdPage)
mapPagePermission[pg.IdPage] = pg
} }
result, err = r.getPageByIds(c, dbconn, pageIds) result, err = r.getPageByIds(c, dbconn, pageIds)
@@ -183,6 +185,12 @@ func (r accessRepo) GetAvailablePageByKeycloakId(c context.Context, keycloakId s
return nil, err return nil, err
} }
// map result page with permission
for i := range len(result) {
log.Println(result[i].ID)
result[i].Permission = mapPagePermission[result[i].ID]
}
return result, nil return result, nil
} }
@@ -779,6 +787,10 @@ func (r accessRepo) getPageIdsByPermissionIds(c context.Context, db *sqlx.DB, pe
{Expression: "id"}, {Expression: "id"},
{Expression: "id_permission"}, {Expression: "id_permission"},
{Expression: "id_page"}, {Expression: "id_page"},
{Expression: "create"},
{Expression: "read"},
{Expression: "update"},
{Expression: "delete"},
}, },
Filters: []queryUtils.FilterGroup{ Filters: []queryUtils.FilterGroup{
{ {
+15
View File
@@ -2,11 +2,19 @@ package access
import "antrian-operasi/internal/shared" import "antrian-operasi/internal/shared"
type AvailableMenuAccessResponse struct {
Create bool `json:"create"`
Read bool `json:"read"`
Update bool `json:"update"`
Delete bool `json:"delete"`
}
type AvailableMenuChildResponse struct { type AvailableMenuChildResponse struct {
Title string `json:"title"` Title string `json:"title"`
Icon string `json:"icon"` Icon string `json:"icon"`
To string `json:"to"` To string `json:"to"`
Children []*AvailableMenuChildResponse `json:"children"` Children []*AvailableMenuChildResponse `json:"children"`
Access AvailableMenuAccessResponse `json:"access"`
} }
type AvailableMenuResponse struct { type AvailableMenuResponse struct {
@@ -24,9 +32,16 @@ func MapMenuModelToResponse(pages []RolePageModel) []AvailableMenuResponse {
// First pass: create all menu items // First pass: create all menu items
for _, p := range pages { for _, p := range pages {
pageMap[p.ID] = &AvailableMenuChildResponse{ pageMap[p.ID] = &AvailableMenuChildResponse{
Title: p.Name, Title: p.Name,
Icon: p.Icon.String, Icon: p.Icon.String,
To: p.Url.String, To: p.Url.String,
Access: AvailableMenuAccessResponse{
Create: p.Permission.Create,
Read: p.Permission.Read,
Update: p.Permission.Update,
Delete: p.Permission.Delete,
},
} }
} }