Ich habe einen Client, der ohne Passwort auf genau ein fhem device X lesend zugreifen soll. Mehr Geräte soll der Client aus Sicherheitsgründen auch nicht sehen. Dazu habe ich eine separate FHEMWEB Instanz angelegt und habe diese mit allowed abgesichert mit folgenden Attrributen:
attr allowed_WEBinstanz allowedCommands get
attr allowed_WEBinstanz allowedDevices X
Ich hatte immer angenommen, dass ich mit der Konfiguration wenn ich die WEBinstanz aufrufe nur das eine Gerät X sehe. Ein Testaufruf bestätigt jedoch, dass dies nicht der Fall ist. Ich sehe trotzdem alle Geräte.
Nach Aufruf der Commandref ist mir das klar, denn dort steht:
ZitatallowedDevices
Komma getrennte Liste von Gerätenamen, die mit dem passenden Frontend (siehe validFor) geändert werden können.
Scheinbar kann ich also mit allowedDevices nur Änderungen bzw. Schreibrechte, nicht die Leserechte konfigurieren. Das wundert mich, da ich die Schreibrechte ja in Kombination mit allowedCommands ohnehin auf Leserechte bzw. get einschränken könnte.
Gibt es eine andere Möglichkeit, wie ich einem Client nur den lesenden Zugriff auf bestimmte Geräte erlauben kann und er andere Geräte garnicht zu sehen bekommt?
Falls nein, könnte man z.B. ein allowedDeviceAccess oder so einführen, so dass ein Client beim Zugriff auf diese WebInstanz nur die dort konfigurierten Geräte sieht?
Gute Frage. Beim Nachdenken darüber kommt mir noch eine weitergehende Frage in den Sinn:
Die kommagetrennte Liste bei allowedDevices ist zwar nett, aber warum wird an dieser Stelle nicht devspec unterstützt? Dann hätte man über FILTER sehr viel mehr Möglichkeiten, die entsprechenden Geräte zu definieren.
Das ist garnicht so einfach
alle Räume verbieten
alle links Input usw verbieten
attr extraRooms definieren
leider lassen sich die webCmd nicht ausblenden, daher noch ein cloneDummy auf das org.Device gesetzt (stateFormat dort dann entsprechend gesetzt)
defmod WEB8084 FHEMWEB 8084 global
attr WEB8084 defaultRoom dyn
attr WEB8084 extraRooms name=dyn:devspec=NAME=testMysens(1|2)
attr WEB8084 hiddenroom save,Everything,input,detail,Commandref,Remote doc,Logfile,Edit files,Event monitor,Select style
attr WEB8084 hiddenroomRegexp .*
attr WEB8084 iconPath default:fhemSVG:openautomation:
attr WEB8084 plotfork 1
attr WEB8084 reverseLogs 1
attr WEB8084 styleData {\
"f18": {\
"Pinned.menu": "true",\
"hidePin": "true",\
"cols.bg": "F8F8F8",\
"cols.fg": "366a70",\
"cols.link": "5257ff",\
"cols.evenrow": "E8E8E8",\
"cols.oddrow": "F0F0F0",\
"cols.header": "DDDDDD",\
"cols.menu": "EEEEEE",\
"cols.sel": "CAC8CF",\
"cols.inpBack": "FFFFFF",\
"savePinChanges": true,\
"fixedInput": true,\
"hideTextInput": true,\
"hideInput": true\
}\
}
attr WEB8084 stylesheetPrefix f18
attr WEB8084 title HC1
EDIT:
attr WEB8084 defaultRoom dyn
funktioniert natürlich nicht >:( für dynamische Räume
Im Prinzip geht das mit hiddenroom, aber der Blacklist-Ansatz ist sehr mühsam und ist fehleranfällig bzw. schlecht zu warten, da ich die Liste jedesmal neu anpassen muss, wenn ich einen neuen room erstelle. Schöner wäre ein Whitelist-Ansatz, bei dem ich festlegen kann, welche Devices oder rooms erlaubt sind.
Im Übrigen müsste man forbiddenroom nehmen, andernfalls kann man in das Verzeichnis wechseln.
Die andere Frage wäre, ob ein JSONList-Abfrage auch nur geräte aus gewhitelisteten räumen zeigen würde und direkte aufrufe über cmd=get/set... auch nur für geräte ginge, die in gewhitlisteten räumen sind. Hat das mal jemand getestet?
Zitatda ich die Liste jedesmal neu anpassen muss, wenn ich einen neuen room erstelle.
ne siehe
attr WEB8084 hiddenroomRegexp .*
alle Räume !
attr WEB8084 extraRooms name=dyn:devspec=NAME=testMysens(1|2)
und das ist ein dynamischer Raum über devspec, den gibt es garnicht als Raum ;)
du musst das mal ausprobieren.
ok, aber hiddenroom reicht mit nicht. da kommt man über den roomnamen in der url noch immer in alle räume und bei forbiddenroom gibt es keine regex.
Nur mal ein Bild um deine Aussage zu widerlegen
Du hast es nicht ausprobiert ;)
ok, sorry, du hast recht. ich habe es nicht ausprobiert. es stand so in der commandref...
Zitat von: fhem-hm-knecht am 26 August 2019, 20:07:10
Nur mal ein Bild um deine Aussage zu widerlegen
Du hast es nicht ausprobiert ;)
Hallo, könnte ich mal dazu die allow und fhem instance als code sehen?
Danke
Bekomme es auch nicht hin.
VG T
defmod allowed_WEB8084 allowed
attr allowed_WEB8084 allowedCommands ,
attr allowed_WEB8084 allowedDevices testIAD
attr allowed_WEB8084 validFor WEB8084
setstate allowed_WEB8084 validFor:WEB8084
setstate allowed_WEB8084 2019-08-25 15:11:41 state validFor:WEB8084
FHEMWEB habe ich im #2 Beitrag
Hallo Hary,
danke.
habe es jetzt - also ohne diesen dyn raum - hinbekommen.
War mir etwas unklar, was ich in der webinstanz und was in der allowed instanz machen kann/muss.
Danke
ZitatIch hatte immer angenommen, dass ich mit der Konfiguration wenn ich die WEBinstanz aufrufe nur das eine Gerät X sehe. Ein Testaufruf bestätigt jedoch, dass dies nicht der Fall ist. Ich sehe trotzdem alle Geräte.
Ich habe das jetzt gefixt, indem ich FHEMWEB.pm von "keys %defs" auf devspec2array(".*", $FW_chash) umgestellt habe.
Das wird zwar langsamer sein, ich hoffe aber, dass die Performance-Unterschiede ertraeglich sind.
Damit das Log nicht mit Fehlermeldungen geflutet wird (wie bei list, falls man allowedDevices gesetzt hat), hat AllowedFn jetzt einen optionalen $silent Attribut.
Zusaetzlich hat f18.pm eine "Hide menu" Option bekommen.
Hallo,
mal eine andere Frage in dem Zusammenhang.
Wieviel Ressourcen kostet eine zusätzlich Webinstanz?
habe nun einige zum Testen, leider kann ich die nicht mit einem Attribut auf disabled oder inactive setzen.
Oder habe ich da etwas übersehen?
Danke Thomas
ZitatWieviel Ressourcen kostet eine zusätzlich Webinstanz?
Wenig
Zitat von: rudolfkoenig am 27 August 2019, 10:41:35
Ich habe das jetzt gefixt, indem ich FHEMWEB.pm von "keys %defs" auf devspec2array(".*", $FW_chash) umgestellt habe.
Das wird zwar langsamer sein, ich hoffe aber, dass die Performance-Unterschiede ertraeglich sind.
Damit das Log nicht mit Fehlermeldungen geflutet wird (wie bei list, falls man allowedDevices gesetzt hat), hat AllowedFn jetzt einen optionalen $silent Attribut.
Zusaetzlich hat f18.pm eine "Hide menu" Option bekommen.
Vielen Dank Rudolf, das klappt jetzt, ich sehe jetzt auch wirklich nur dei allowedDevices.