generated from VLADIMIR/template
77 lines
1.5 KiB
Go
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
|
|
}
|