130 lines
4.3 KiB
Go
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
|
|
}
|