Files
fm_be/internal/domain/auth/permission_module.go
2026-07-16 22:16:45 +07:00

130 lines
4.3 KiB
Go

package auth
import "strings"
const (
ModuleUser = "user"
ModuleRole = "role"
ModuleHelicopter = "helicopter"
ModuleHelicopterUsage = "helicopter_usage"
ModuleReserveAC = "reserve_ac"
ModuleComplaint = "complaint"
ModuleActionSignoff = "action_signoff"
ModuleMCF = "mcf"
ModuleEASARelease = "easa_release"
ModuleFlightInspection = "flight_inspection"
ModuleAfterFlight = "after_flight"
ModuleFlight = "flight"
ModuleFlightPrepCheck = "flight_prep_check"
ModuleDutyRoster = "duty_roster"
ModuleDUL = "dul"
ModuleHEMSOperation = "hems_operation"
ModuleHEMSBase = "hems_base"
ModuleOperation = "operation"
ModuleOperationCategory = "operation_category"
ModuleForcesPresent = "forces_present"
ModuleAirRescuerChecklist = "air_rescuer_checklist"
ModuleMedicine = "medicine"
ModulePatientData = "patient_data"
ModuleInsurancePatientData = "insurance_patient_data"
ModuleHealthInsuranceCompanies = "health_insurance_companies"
ModuleVocation = "vocation"
ModuleBase = "base"
ModuleFacility = "facility"
ModuleCountry = "country"
ModuleFederalState = "federal_state"
ModuleICAO = "icao"
ModuleNoICAOCode = "no_icao_code"
ModuleOPC = "opc"
ModuleMasterSettings = "master_settings"
ModuleFileManager = "file_manager"
ModuleFilesystem = "filesystem"
ModuleAudit = "audit"
)
type ModuleInfo struct {
Key string
Label string
}
var ModuleRegistry = []ModuleInfo{
{ModuleUser, "User"},
{ModuleRole, "Role"},
{ModuleHelicopter, "Helicopter"},
{ModuleHelicopterUsage, "Helicopter Usage"},
{ModuleReserveAC, "Reserve AC"},
{ModuleComplaint, "Complaint"},
{ModuleActionSignoff, "Action Sign-off"},
{ModuleMCF, "MCF"},
{ModuleEASARelease, "EASA Release"},
{ModuleFlightInspection, "Flight Inspection"},
{ModuleAfterFlight, "After Flight Inspection"},
{ModuleFlight, "Flight"},
{ModuleFlightPrepCheck, "Flight Prep Check"},
{ModuleDutyRoster, "Duty Roster"},
{ModuleDUL, "DUL"},
{ModuleHEMSOperation, "HEMS Operation"},
{ModuleHEMSBase, "HEMS Base"},
{ModuleOperation, "Operation"},
{ModuleOperationCategory, "Operation Category"},
{ModuleForcesPresent, "Forces Present"},
{ModuleAirRescuerChecklist, "Air Rescuer Checklist"},
{ModuleMedicine, "Medicine"},
{ModulePatientData, "Patient Data"},
{ModuleInsurancePatientData, "Insurance Patient Data"},
{ModuleHealthInsuranceCompanies, "Health Insurance Companies"},
{ModuleVocation, "Vocation"},
{ModuleBase, "Base"},
{ModuleFacility, "Facility"},
{ModuleCountry, "Country"},
{ModuleFederalState, "Federal State"},
{ModuleICAO, "ICAO"},
{ModuleNoICAOCode, "No ICAO Code"},
{ModuleOPC, "OPC"},
{ModuleMasterSettings, "Master Settings"},
{ModuleFileManager, "File Manager"},
{ModuleFilesystem, "Filesystem"},
{ModuleAudit, "Audit"},
}
var moduleOrder = func() map[string]int {
m := make(map[string]int, len(ModuleRegistry))
for i := range ModuleRegistry {
m[ModuleRegistry[i].Key] = i
}
return m
}()
// ModuleLabel returns the display label for a module key, falling back to the
// key itself when the module is not registered.
func ModuleLabel(key string) string {
if i, ok := moduleOrder[key]; ok {
return ModuleRegistry[i].Label
}
return key
}
// IsRegisteredModule reports whether key is a known module in ModuleRegistry.
func IsRegisteredModule(key string) bool {
_, ok := moduleOrder[key]
return ok
}
// ModuleSortIndex returns a module's position in ModuleRegistry, or a large
// value (sorting unknown modules last) when it is not registered.
func ModuleSortIndex(key string) int {
if idx, ok := moduleOrder[key]; ok {
return idx
}
return len(ModuleRegistry)
}
// ModuleForKey derives the module from a permission key by taking the segment
// before the first dot, e.g. "dul.create" -> "dul", "role.permission.read" -> "role".
func ModuleForKey(permissionKey string) string {
if i := strings.Index(permissionKey, "."); i >= 0 {
return permissionKey[:i]
}
return permissionKey
}