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