54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package permission
|
|
|
|
import (
|
|
"RenewCMS/internal/domain/role"
|
|
"RenewCMS/internal/infrastructure/useCases"
|
|
"encoding/json"
|
|
"net/http"
|
|
)
|
|
|
|
type Handler struct {
|
|
ListUseCase *useCases.ListPermissionsUseCase
|
|
}
|
|
|
|
func NewHandler(list *useCases.ListPermissionsUseCase) *Handler {
|
|
return &Handler{ListUseCase: list}
|
|
}
|
|
|
|
type permissionItem struct {
|
|
Key string `json:"key"`
|
|
ScopeKind role.Kind `json:"scope_kind"`
|
|
OwnerOnly bool `json:"owner_only"`
|
|
PerType bool `json:"per_type"`
|
|
}
|
|
|
|
type permissionGroup struct {
|
|
Key string `json:"key"`
|
|
Items []permissionItem `json:"items"`
|
|
}
|
|
|
|
type permissionResponse struct {
|
|
Groups []permissionGroup `json:"groups"`
|
|
}
|
|
|
|
func toResponse(groups []useCases.PermissionGroup) permissionResponse {
|
|
response := permissionResponse{Groups: make([]permissionGroup, 0, len(groups))}
|
|
for _, group := range groups {
|
|
items := make([]permissionItem, 0, len(group.Items))
|
|
for _, permission := range group.Items {
|
|
items = append(items, permissionItem{Key: permission.Key, ScopeKind: permission.Kind, OwnerOnly: permission.OwnerOnly, PerType: permission.PerType()})
|
|
}
|
|
response.Groups = append(response.Groups, permissionGroup{Key: group.Key, Items: items})
|
|
}
|
|
return response
|
|
}
|
|
|
|
func (h *Handler) List(w http.ResponseWriter, r *http.Request) {
|
|
body, err := json.Marshal(toResponse(h.ListUseCase.List()))
|
|
if err != nil {
|
|
http.Error(w, "Internal server error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
_, _ = w.Write(body)
|
|
}
|