Files
evening_detective_server/internal/services/ui_service/service.go
T
2026-10-10 13:29:57 +07:00

77 lines
1.5 KiB
Go

// Package ui_service serves the user interface.
package ui_service
import (
rolesModule "evening_detective_server/internal/modules/roles"
"slices"
)
var (
permissions = map[string][]string{
rolesModule.Admin: {
"users_page",
"reviews_page",
},
rolesModule.Developer: {
"tasks_page",
},
rolesModule.Author: {
"scenarios_page",
"scenario_editor_page",
},
rolesModule.Organizer: {
"scenarios_page",
"games_page",
"game_panel_page",
},
rolesModule.User: {
"games_page",
"catalog_page",
},
}
)
// UIService provides user interface permissions.
type UIService struct {
Environment string
}
// NewUIService creates a UI service.
func NewUIService(venueMode bool) *UIService {
environment := "prod"
if venueMode {
environment = "venue"
}
return &UIService{Environment: environment}
}
// GetPermissions returns permissions for the supplied roles.
func (s *UIService) GetPermissions(roles []string) []string {
resMap := s.getPermissionsMap(roles)
res := make([]string, 0, len(resMap))
for permission := range resMap {
res = append(res, permission)
}
return res
}
func (s *UIService) getPermissionsMap(roles []string) map[string]any {
resMap := make(map[string]any, 100)
if slices.Contains(roles, rolesModule.Admin) {
for _, permissionsList := range permissions {
for _, permission := range permissionsList {
resMap[permission] = struct{}{}
}
}
return resMap
}
for _, role := range roles {
for _, permission := range permissions[role] {
resMap[permission] = struct{}{}
}
}
return resMap
}