detail dan update page access (CRUD)
This commit is contained in:
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user