bffh.dhall
BFFH usesverwendet DHALL forfür Config-Filedie structureStruktur der Konfigurationsdateien BFFH usesverwendet RBAC forfür accessdie controlZugriffskontrolle.
Die Konfiguration von BFFH Configbefindet issich in der Datei bffh.dhall
file..
GeneralAllgemeine BFFH ConfigKonfiguration
listens
ContainsEnthält thedie AddressesAdressen, auf die BFFH isbei listender forVerbindung Connectionfür for thedie API Defaulthört. PortStandardport forfür BFFH isist 59661
Example:Beispiel:
listens =
[
{ address = "127.0.0.1", port = Some 59661 }
]
mqtt_url
ContainsEnthält thedie AddressAdresse fordes theMQTT-Servers, MQTTmit Serverdem sich BFFH connects to.verbindet.
TheDie AddressAdresse hashat thedas formatFormat <protocol>://[user]:[password]@<server>:[port]
protocol
iswirdrequiredbenötigtandundcankannbeeinsonederof:folgenden Werte annehmen:mqtt
,tcp
,mqtts
,ssl
user
andundpassword
aresind optionalserver
isistrequirederforderlichandundcankannbeeineanIP-AdresseipoderaddresseinorHostnamea hostnameseinport
isistoptionaloptional. Der Standardport ist59661
Beispiele:
mqtt_url = "tcp://localhost:1883"
mqtt_url = "mqtts://user:password@server.tld:port"
db_path
Contains the Path for the internal Database BFFH uses. BFFH will create two files: <db_path>
and <db_path>-lock
. Make sure that BFFH has write access in the relevant directory Example:
db_path = "/tmp/bffh"
PermissionsBerechtigungen (Permissions)
Modellieren von Berechtigungen
Modellieren von Berechtigungen
Allgemeines Schema: space.type.category.permission.model
Administratorspace.machines.printers.*
Offene Berechtigungspace.machines.printers.read.*
BFFH usesverwendet aeine Path-stylepfadähnliche stringZeichenkette asals permissionErlaubnisformat, format,getrennt separateddurch byeinen “.
Punkt. So ”.forbesteht examplezum Beispiel this.is.a.permission
consistsaus ofden the partsTeilen this
, is
, a
andund permission
. WhenBei requireingder permissions,Anforderung suchvon asBerechtigungen, z. B. in machinesMaschinen, youmuss alwaysimmer needeine togenaue giveBerechtigung anangegeben exactwerden, permission,also soz. for exampleB. test.write
. WhenBei grantingder permissions,Erteilung suchvon asBerechtigungen, z. B. in rolesRollen, youkönnen canentweder eithereine givegenaue anBerechtigung exactangegeben permissionoder ordie youbeiden can use the two wildcardsPlatzhalter *
andund +
. Theseverwendet wildcardswerden. behaveDiese similarWildcards toverhalten regexsich orähnlich bashwie wildcards:Regex- oder Bash-Wildcards:
*
grantsgewährtallallepermissionsBerechtigungen inthatdiesemsubtree.Teilbaum.So,So wirdperms.read.*
willfürmatchjedesforvonanypassen:of:
perms.read
perms.read.machineA
perms.read.machineB
perms.read.machineC.manage
+
grantsgewährtallallepermissionsBerechtigungenbelowunterthatdesone.Wertes.So,So wirdperms.read.+*
willfürmatchjedesforvonanypassen:of:
perms.read.machineA
perms.read.machineB
perms.read.machineC.manage
butabernotnichtperms.read
Wildcards aresind probablywahrscheinlich mostam usefulnützlichsten, ifum youMaschinen groupzu yougruppieren, machines around them, e.g. yourz.B. 3D-printersDrucker andund youreine one bandsaw require:Bandsäge:
- Write
permissions(schreiben) Berechtigungen
machines.printers.write.prusa.sl1
machines.printers.write.prusa.i3
machines.printers.write.anycubic
machines.bandsaws.write.bandsaw1
- Manage
permissions(verwalten) Berechtigungenmachines.printers.manage.prusa.sl1
machines.printers.manage.prusa.i3
machines.printers.manage.anycubic
machines.bandsaws.manage.bandsaw1
- Admin
permissionsBerechtigungen
machines.printers
ForFürallalleprintersDrucker
machines.bandsaws
ForFürallallebandsawsBandsägen
AndDann youerteilen thenwir giveden rolesRollen permissionsdie likeentsprechenden so:Rechte:
UseNutzeanybeliebige3D printer:3D-Drucker:machines.printers.write.+
OnlyErlaubeallownurusedieofNutzungthe"billiger"“cheap” printersDrucker:machines.printers.write.anycubic.*
machines.printers.write.prusa.i3
AllowErlaubemanagingdasofVerwaltenprinters:der Drucker:machines.printers.+
AllowErlaubteadministratingdasprinters:Administrieren aller Drucker:machines.printers.*
ThisAuf waydiese ifWeise youklappt buyes atrotzdem differentmit anycubicder andAufteilung, splitwenn thespäter permissionsein toweitere e.g.Anycubic Drucker gekauft wird:
machines.printers.write.anycubic.i3
machines.printers.write.anycubic.megax
It
Konfiguration stillvon works out.
Maschinen
Machine Config
machines
machines
ContainsEnthält listeine ofListe machines
Machinesdefinierten haveMaschinen. differentDie perissionMaschinen levelshaben toverschiedene interactWahrnehmungsebenen, with:mit denen interagiert werden kann:
disclose: User can see the machine in machine listread: User can read information about the machine and there statewrite: User can use the machine- manage: User can interact with the machine as Manager (Check, ForceFree, ForceTransfer)
- disclose (offenlegen): Benutzer kann die Maschine in der Maschinenliste sehen
- read (lesen): Der Benutzer kann Informationen über die Maschine und ihren Zustand lesen
- schreiben: Der Benutzer kann die Maschine benutzen
- Verwalten: Der Benutzer kann als Manager mit dem Rechner interagieren (Prüfen, Freigeben, Übertragen)
EachJede machineMaschine mustmuss have aneine ID tohaben, reference the machineum in otheranderen partTeilen ofdieser thisKonfiguration configoder orüber overdie theAPI API.auf Anddie eachMaschine machineverweisen mustzu havekönnen. aUnd name.jede Maschine muss einen Namen haben.
OptionalOptionale InformationInformationen
ToUm provideweitere moreInformationen informationüber aboutdie theMaschine machinebereitzustellen, youkönnen candiesen addBeschreibungen ithinzugefügt tooder theein descriptionexterner orWiki-Link providbereitstellt anwerden. externalBeide wikiAttribute link.sind Both attributes are onlynur optional andund domüssen notnicht needgesetzt to be set.werden.
Example:Beispiel:
machines =
{
machine123 =
{
name = "Testmachine",
description = Some "A test machine",
wiki = "https://someurl"
disclose = "lab.test.read",
read = "lab.test.read",
write = "lab.test.write",
manage = "lab.test.admin"
}
}
“machine123” is in this case the “Machine-ID”
RolesKonfiguration Configvon Rollen
The roles are configured in the bffh.dhall. If the file “roles.toml” is existing in the directory, it can be deleted and can’t be used to manage roles.
roles
ContainsEnthält listdie ofListe roles
Rolesdefinierten haveRollen. aRollen listhaben ofeine permissionListe andvon canBerechtigungen beund inherited.können Permissionvererbt canwerden. beDie wildcardBerechtigung kann ein Platzhalter in permissionder list.Berechtigungsliste sein.
Example:Beispiel:
roles =
{
testrole =
{
permissions = [ "lab.test.*" ]
},
somerole =
{
parents = ["testparent"],
permissions = [ "lab.some.admin" ]
},
testparent =
{
permissions =
[
"lab.some.write",
"lab.some.read",
"lab.some.disclose"
]
}
}
ActorsKonfigurations Configvon Aktoren (actors)
actors
ContainsEnthält listeine ofListe actorsvon ActorsAktoren. areAktoren definedwerden bydurch aein moduleModul andund oneeinen oroder moremehrere paramtersParameter definiert. Aktuell unterstützte Aktoren sind:
Currenty supported actors:
Shelly Actor
ThisDieser actorAktor connectsverbindet BFFH overüber aneinen MQTT-Server tomit aneinem shellyShelly device.Gerät.
You need to set theDer topic
parameterParameter of thedes Shelly tomuss theauf Shellydas specificShelly-spezifische MQTT-Topic.Topic gesetzt werden.
Example:Beispiel:
actors =
{
Shelly_123 =
{
module = "Shelly",
params =
{
topic = "shellyplug-s-123456"
}
}
}
“Shelly_123”„Shelly_123“ isist in thisdiesem caseFall thedie “"Actor-ID”ID".
Process Actor
ThisDieser actorAktor makesermöglicht ites, possibleeigene forGeräte youmit todem connectBFFH yourServer ownzu Devices to BFFH.verbinden.
cmd
= PathPfad ofder executable
Dateiargs
= ArgumentsArgumente forder executableausführbaren Datei
Example:Beispiel:
actors =
{
Bash =
{
module = "Process", params =
{
cmd = "./examples/actor.sh",
args = "your ad could be here"
}
}
}
actor_connections
ConnectsVerbindet theden actorAktor withmit aeiner machineMaschine. AEine machineMaschine cankann havemehrere multipleAktoren actorshaben. Verwenden Sie die "Machine-ID" und "Actor-ID".
Use the “Machine-ID” and “Actor-ID”. Example:Beispiel:
actor_connections =
[
{ machine = "Testmachine", actor = "Shelly_1234" },
{ machine = "Another", actor = "Bash" },
{ machine = "Yetmore", actor = "Bash2" }
]
Konfiguration exportieren
BASE="/opt/fabinfra/bffh/target/release"
CFG="$DATA/config/cfg.dhall"
$BASE/bffhd --verbose --config $CFG --dump-users /tmp/users.toml --force