feat: roles system backend
This commit is contained in:
1 parent
44cca46d5e
commit
8c6c6456da
50 files changed
+2578
-22
No files matched your search
@@ -0,0 +1,53 @@
|
||||
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)
|
||||
}
|
||||
Reference in new issue
Block a user