diff --git a/internal/domain/access/repository.go b/internal/domain/access/repository.go index 2f5ca15..ad4fd2c 100644 --- a/internal/domain/access/repository.go +++ b/internal/domain/access/repository.go @@ -38,6 +38,7 @@ type accessRepo struct { func NewRepository(dbService database.Service) IAccessRepository { queryBuilder := queryUtils.NewQueryBuilder(queryUtils.DBTypePostgreSQL).SetAllowedColumns([]string{ "id", "name", "is_active", "keycloak_id", "id_user", "id_permission", "email", "created_at", "id_page", "sort", "level", + "\"create\"", "read", "update", "delete", }).SetAllowedTables([]string{TBL_USER}) queryBuilder.SetSecurityOptions(false, 100) @@ -372,12 +373,19 @@ func (r accessRepo) DetailRolePermission(c context.Context, permission_id string // fetch eligible page for role eligiblePagesMap := make(map[string]bool) + eligiblePagesAccessMap := make(map[string]AvailableMenuAccessResponse) eligiblePages, err := r.getPageIdsByPermissionIds(c, dbconn, []string{permission_id}) if err != nil { return result, err } for _, p := range eligiblePages { eligiblePagesMap[p.IdPage] = true + eligiblePagesAccessMap[p.IdPage] = AvailableMenuAccessResponse{ + Create: p.Create, + Update: p.Update, + Read: p.Read, + Delete: p.Delete, + } } for _, p := range allPages { @@ -392,6 +400,7 @@ func (r accessRepo) DetailRolePermission(c context.Context, permission_id string IsActive: isActive, Sort: p.Sort, ParentId: &p.ParentId.String, + Access: eligiblePagesAccessMap[p.ID], }) } @@ -433,7 +442,7 @@ func (r accessRepo) UpdateRolePermission(c context.Context, req UpdateRolePageRe } // inserting new permission - err = r.insertPagePermission(c, tx, req.ID, pageIds) + err = r.insertPagePermission(c, tx, req, pageIds) if err != nil { tx.Rollback() return err @@ -831,20 +840,35 @@ func (r accessRepo) deletePageIdsByPermissionId(c context.Context, tx *sql.Tx, p return nil } -func (r accessRepo) insertPagePermission(c context.Context, tx *sql.Tx, permissionId string, pageIds []string) error { +func (r accessRepo) insertPagePermission(c context.Context, tx *sql.Tx, req UpdateRolePageRequest, pageIds []string) error { if len(pageIds) > 0 { var valueUserPermission [][]interface{} + mapPageUserAccess := make(map[string]AvailableMenuAccessResponse) + + permissionId := req.ID + + for _, page := range req.AccessPage { + mapPageUserAccess[page.ID] = page.Access + } for _, pageId := range pageIds { id := uuid.New().String() - itemValues := []interface{}{id, permissionId, pageId} + itemValues := []interface{}{ + id, + permissionId, + pageId, + mapPageUserAccess[pageId].Create, + mapPageUserAccess[pageId].Read, + mapPageUserAccess[pageId].Update, + mapPageUserAccess[pageId].Delete, + } valueUserPermission = append(valueUserPermission, itemValues) } insertPagePermissionQuery := queryUtils.InsertBulkData{ Columns: []string{ - "id", "id_permission", "id_page", + "id", "id_permission", "id_page", "\"create\"", "read", "update", "delete", }, Values: valueUserPermission, } diff --git a/internal/domain/access/response.go b/internal/domain/access/response.go index db3b7ee..2211157 100644 --- a/internal/domain/access/response.go +++ b/internal/domain/access/response.go @@ -90,11 +90,12 @@ type ListRolePermissionPaginateResponse struct { } type AccessPage struct { - ID string `json:"id" binding:"required"` - Page string `json:"page"` - IsActive bool `json:"is_active" binding:"required"` - Sort int `json:"sort"` - ParentId *string `json:"parent_id" binding:"uuid"` + ID string `json:"id" binding:"required"` + Page string `json:"page"` + IsActive bool `json:"is_active" binding:"required"` + Sort int `json:"sort"` + ParentId *string `json:"parent_id" binding:"uuid"` + Access AvailableMenuAccessResponse `json:"access"` } type DetailRolePageResponse struct {