115 lines
2.3 KiB
Go
115 lines
2.3 KiB
Go
package routes
|
||
|
||
import (
|
||
"bssapp-backend/auth"
|
||
"bssapp-backend/permissions"
|
||
"database/sql"
|
||
"encoding/json"
|
||
"net/http"
|
||
)
|
||
|
||
/* =====================================================
|
||
HANDLER
|
||
===================================================== */
|
||
|
||
type PermissionHandler struct {
|
||
DB *sql.DB
|
||
Repo *permissions.PermissionRepository
|
||
}
|
||
|
||
func NewPermissionHandler(db *sql.DB) *PermissionHandler {
|
||
return &PermissionHandler{
|
||
DB: db,
|
||
Repo: permissions.NewPermissionRepository(db),
|
||
}
|
||
}
|
||
|
||
/* =====================================================
|
||
POST /api/permissions/matrix
|
||
===================================================== */
|
||
|
||
func (h *PermissionHandler) UpdatePermissionMatrix(
|
||
w http.ResponseWriter,
|
||
r *http.Request,
|
||
) {
|
||
|
||
claims, ok := auth.GetClaimsFromContext(r.Context())
|
||
if !ok || claims == nil {
|
||
http.Error(w, "unauthorized", 401)
|
||
return
|
||
}
|
||
|
||
var req []permissions.PermissionUpdateRequest
|
||
|
||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||
http.Error(w, "invalid payload", 400)
|
||
return
|
||
}
|
||
|
||
if len(req) == 0 {
|
||
w.WriteHeader(http.StatusOK)
|
||
return
|
||
}
|
||
|
||
err := h.Repo.UpdatePermissions(req)
|
||
if err != nil {
|
||
http.Error(w, "db error", 500)
|
||
return
|
||
}
|
||
|
||
json.NewEncoder(w).Encode(map[string]any{
|
||
"success": true,
|
||
})
|
||
}
|
||
func GetMyPermissionMatrix(db *sql.DB) http.HandlerFunc {
|
||
return func(w http.ResponseWriter, r *http.Request) {
|
||
|
||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||
|
||
claims, ok := auth.GetClaimsFromContext(r.Context())
|
||
if !ok || claims == nil {
|
||
http.Error(w, "unauthorized", 401)
|
||
return
|
||
}
|
||
|
||
var roleID int
|
||
|
||
err := db.QueryRow(`
|
||
SELECT id FROM dfrole WHERE LOWER(code)=LOWER($1)
|
||
`, claims.RoleCode).Scan(&roleID)
|
||
|
||
if err != nil {
|
||
http.Error(w, "role resolve error", 500)
|
||
return
|
||
}
|
||
|
||
repo := permissions.NewPermissionRepository(db)
|
||
|
||
raw, err := repo.GetPermissionMatrixForRoles([]int{roleID})
|
||
if err != nil {
|
||
http.Error(w, "db error", 500)
|
||
return
|
||
}
|
||
|
||
// 🔥 FRONTEND FORMAT
|
||
type Row struct {
|
||
Module string `json:"module"`
|
||
Action string `json:"action"`
|
||
Allowed bool `json:"allowed"`
|
||
}
|
||
|
||
list := make([]Row, 0, len(raw))
|
||
|
||
for _, p := range raw {
|
||
|
||
list = append(list, Row{
|
||
Module: p.ModuleCode, // 👈 burası önemli
|
||
Action: p.Action,
|
||
Allowed: p.Allowed,
|
||
})
|
||
}
|
||
|
||
_ = json.NewEncoder(w).Encode(list)
|
||
}
|
||
}
|