mirror of
https://github.com/elem74/fabaccess-config-generator.git
synced 2025-03-13 07:11:45 +01:00
2024.12a
This commit is contained in:
parent
21a88d4507
commit
a4dafd856e
12
CHANGELOG
12
CHANGELOG
@ -1,3 +1,15 @@
|
|||||||
|
2024.11
|
||||||
|
- **Features**
|
||||||
|
- Neu: Option zur Erstellung eines Domänen-Managers. (`manager_domain`)
|
||||||
|
- Neu: Option zur Erstellung eines werkstattweiten Benutzers. (`domain_user`)
|
||||||
|
- Neu: Option zum Einstellen des CSV-Trennzeichens. (`csv_delimiter`)
|
||||||
|
- **Konzeptionelle Änderungen**
|
||||||
|
-
|
||||||
|
- **Umbenennungen**
|
||||||
|
- Die Einstellung `fa_update_dhall` heißt jetzt `fa_dhall_update`, damit ein einheitliches Benennungsschema mit der dazugehörigen Einstellungen `fa_dhall_file` gegeben ist.
|
||||||
|
- **Weiteres**
|
||||||
|
- Admin-Berechtigungen wurden vollständig auf Wildcard-Zugriffsschema umgestellt. Zuvor wurden Berechtigungen für einzelne Bereiche vergeben.
|
||||||
|
|
||||||
2024.6
|
2024.6
|
||||||
- **Diagrammerzeugung**
|
- **Diagrammerzeugung**
|
||||||
- Das Diagramm enthält jetzt eine Icon-Legende
|
- Das Diagramm enthält jetzt eine Icon-Legende
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
__version__ = '2024.6'
|
__version__ = '2024.12'
|
||||||
|
|
||||||
import time
|
import time
|
||||||
time_start = time.perf_counter()
|
time_start = time.perf_counter()
|
||||||
@ -49,7 +49,7 @@ if settings["create_file_roles"] == True:
|
|||||||
content = generate_csv_roles(roles)
|
content = generate_csv_roles(roles)
|
||||||
write_file('output/roles.csv', content)
|
write_file('output/roles.csv', content)
|
||||||
|
|
||||||
if settings["fa_update_dhall"] == True:
|
if settings["fa_dhall_update"] == True:
|
||||||
print(' --- Aktualisierung der bffh.dhall')
|
print(' --- Aktualisierung der bffh.dhall')
|
||||||
fa_dhall_file = settings["fa_dhall_file"]
|
fa_dhall_file = settings["fa_dhall_file"]
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ if settings["fa_update_dhall"] == True:
|
|||||||
# Pfadangabe "fa_dhall_file" ist leer
|
# Pfadangabe "fa_dhall_file" ist leer
|
||||||
else:
|
else:
|
||||||
print('Einstellung "fa_dhall_file" ist leer, es wurde kein Pfad zur bffh.dhall angegeben.')
|
print('Einstellung "fa_dhall_file" ist leer, es wurde kein Pfad zur bffh.dhall angegeben.')
|
||||||
print('Bitte das Feld ausfüllen oder "fa_update_dhall" auf "False" setzen.')
|
print('Bitte das Feld ausfüllen oder "fa_dhall_update" auf "False" setzen.')
|
||||||
|
|
||||||
# Mermaid-Code
|
# Mermaid-Code
|
||||||
if settings["generate_mermaid"] == True:
|
if settings["generate_mermaid"] == True:
|
||||||
|
@ -15,8 +15,6 @@ class Domain:
|
|||||||
perm_handle = domain_id + '.'
|
perm_handle = domain_id + '.'
|
||||||
id_handle = perm_handle.replace('.', '_')
|
id_handle = perm_handle.replace('.', '_')
|
||||||
|
|
||||||
perms_manager = [perm_handle + '*']
|
|
||||||
|
|
||||||
self.domain = {
|
self.domain = {
|
||||||
"id": domain_id,
|
"id": domain_id,
|
||||||
"name": domain_name
|
"name": domain_name
|
||||||
@ -24,16 +22,29 @@ class Domain:
|
|||||||
|
|
||||||
self.domain_manager = {
|
self.domain_manager = {
|
||||||
"id": id_handle + 'manager',
|
"id": id_handle + 'manager',
|
||||||
"name": string_managerhandle + domain_name,
|
"name": '_' + string_managerhandle + domain_name,
|
||||||
"perms": perms_manager
|
"perms": perm_handle + '*'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.domain_user = {
|
||||||
|
"id": id_handle + 'user',
|
||||||
|
"name": '_' + string_userhandle + domain_name,
|
||||||
|
"perms": []
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_domain(self):
|
def get_domain(self):
|
||||||
return self.domain
|
return self.domain
|
||||||
|
|
||||||
|
def get_domain_perms(self):
|
||||||
|
return self.domain_manager["perms"]
|
||||||
|
|
||||||
def get_domain_manager(self):
|
def get_domain_manager(self):
|
||||||
return self.domain_manager
|
return self.domain_manager
|
||||||
|
|
||||||
|
def get_domain_user(self):
|
||||||
|
return self.domain_user
|
||||||
|
|
||||||
|
|
||||||
class Area(Domain):
|
class Area(Domain):
|
||||||
def __init__(self, domain_id, domain_name, area_id, area_name):
|
def __init__(self, domain_id, domain_name, area_id, area_name):
|
||||||
@ -274,7 +285,7 @@ class GraphElement:
|
|||||||
# Maschinen aus der CSV-importieren
|
# Maschinen aus der CSV-importieren
|
||||||
def import_machines(file):
|
def import_machines(file):
|
||||||
machines = {}
|
machines = {}
|
||||||
data = csv_listdict(file, csv_match)
|
data = csv_listdict(file, settings['csv_delimiter'], csv_match)
|
||||||
|
|
||||||
count = 2
|
count = 2
|
||||||
print(f'{"Zeile": ^8} | {"Status": ^24} | {"Zusatzinformation": ^20}')
|
print(f'{"Zeile": ^8} | {"Status": ^24} | {"Zusatzinformation": ^20}')
|
||||||
@ -355,28 +366,28 @@ def generate_roles(machines):
|
|||||||
if roledata["id"] not in roles.keys():
|
if roledata["id"] not in roles.keys():
|
||||||
roles[roledata["id"]] = roledata
|
roles[roledata["id"]] = roledata
|
||||||
|
|
||||||
|
|
||||||
# Schichtleitung anlegen
|
|
||||||
if settings["manager_schichtleitung"] == True:
|
|
||||||
roledata = manager_schichtleitung
|
|
||||||
|
|
||||||
if roledata["id"] not in roles.keys():
|
|
||||||
roles[roledata["id"]] = roledata
|
|
||||||
|
|
||||||
|
|
||||||
# Domänen durchlaufen
|
# Domänen durchlaufen
|
||||||
for id, m in machines.items():
|
for id, m in machines.items():
|
||||||
|
|
||||||
# Domänen-Berechtigung an Manager & Schichtleitung vergeben
|
# Domänen-Berechtigung an Admin & Manager vergeben
|
||||||
roledata = m.get_domain_manager()
|
|
||||||
for perm in roledata["perms"]:
|
|
||||||
if perm not in roles[admin_global["id"]]["perms"]:
|
|
||||||
roles[admin_global["id"]]["perms"].append(perm)
|
|
||||||
|
|
||||||
if settings["manager_schichtleitung"] == True:
|
# 2do: Admin - Überflüssige Berechtigungen?
|
||||||
for perm in roledata["perms"]:
|
# for perm in roledata["perms"]:
|
||||||
if perm not in roles[manager_schichtleitung["id"]]["perms"]:
|
|
||||||
roles[manager_schichtleitung["id"]]["perms"].append(perm)
|
# if perm not in roles[admin_global["id"]]["perms"]:
|
||||||
|
# roles[admin_global["id"]]["perms"].append(perm)
|
||||||
|
|
||||||
|
# 2do - end
|
||||||
|
|
||||||
|
perm = m.get_domain_perms()
|
||||||
|
|
||||||
|
if perm not in roles[admin_global["id"]]["perms"]:
|
||||||
|
roles[admin_global["id"]]["perms"].append(perm)
|
||||||
|
|
||||||
|
if settings["manager_domain"] == True:
|
||||||
|
|
||||||
|
if roledata["id"] not in roles.keys():
|
||||||
|
roles[roledata["id"]] = roledata
|
||||||
|
|
||||||
# Manager: Domain
|
# Manager: Domain
|
||||||
if settings["multi_domains"] == True:
|
if settings["multi_domains"] == True:
|
||||||
@ -385,6 +396,10 @@ def generate_roles(machines):
|
|||||||
if roledata["id"] not in roles.keys():
|
if roledata["id"] not in roles.keys():
|
||||||
roles[roledata["id"]] = roledata
|
roles[roledata["id"]] = roledata
|
||||||
|
|
||||||
|
for perm in roledata["perms"]:
|
||||||
|
if perm not in roles[manager_domain["id"]]["perms"]:
|
||||||
|
roles[manager_domain["id"]]["perms"].append(perm)
|
||||||
|
|
||||||
# Manager: Area
|
# Manager: Area
|
||||||
if settings["manager_area"] == True:
|
if settings["manager_area"] == True:
|
||||||
roledata = m.get_area_manager()
|
roledata = m.get_area_manager()
|
||||||
@ -403,30 +418,51 @@ def generate_roles(machines):
|
|||||||
|
|
||||||
# Benutzer: Daten abrufen
|
# Benutzer: Daten abrufen
|
||||||
|
|
||||||
if m.has_customrole() == True:
|
if settings["domain_user"] == True:
|
||||||
# Extrarolle
|
# Domäne-Benutzer
|
||||||
roledata = m.get_customrole()
|
roledata = m.get_domain_user()
|
||||||
|
|
||||||
if roledata["id"] in roles.keys():
|
|
||||||
# Extrarolle vorhanden --> Berechtigungen hinzufügen
|
|
||||||
for p in roledata["perms"]:
|
|
||||||
roles[roledata["id"]]["perms"].append(p)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
# Kein Domäne-Benutzer
|
||||||
|
if m.has_customrole() == True:
|
||||||
|
# Extrarolle
|
||||||
|
roledata = m.get_customrole()
|
||||||
|
|
||||||
|
if roledata["id"] in roles.keys():
|
||||||
|
# Extrarolle vorhanden --> Berechtigungen hinzufügen
|
||||||
|
for p in roledata["perms"]:
|
||||||
|
roles[roledata["id"]]["perms"].append(p)
|
||||||
|
|
||||||
if m.has_subarea() == True:
|
|
||||||
# Unterbereich
|
|
||||||
roledata = m.get_subarea_user()
|
|
||||||
else:
|
else:
|
||||||
# Bereich
|
|
||||||
roledata = m.get_area_user()
|
|
||||||
|
|
||||||
# print_dict(roledata)
|
if m.has_subarea() == True:
|
||||||
|
# Unterbereich
|
||||||
|
roledata = m.get_subarea_user()
|
||||||
|
else:
|
||||||
|
# Bereich
|
||||||
|
roledata = m.get_area_user()
|
||||||
|
|
||||||
# Benutzer: Hinzufügen
|
# Benutzer: Hinzufügen
|
||||||
if roledata["id"] not in roles.keys():
|
if roledata["id"] not in roles.keys():
|
||||||
roles[roledata["id"]] = roledata
|
roles[roledata["id"]] = roledata
|
||||||
|
|
||||||
|
# Domänen-Benutzer: Berechtigungen hinzufügen
|
||||||
|
|
||||||
|
if settings["domain_user"] == True:
|
||||||
|
if m.has_subarea() == True:
|
||||||
|
# Unterbereich
|
||||||
|
perms = m.get_subarea_user()["perms"]
|
||||||
|
else:
|
||||||
|
# Bereich
|
||||||
|
perms = m.get_area_user()["perms"]
|
||||||
|
|
||||||
|
for p in perms:
|
||||||
|
if p not in roles[roledata["id"]]["perms"]:
|
||||||
|
roles[roledata["id"]]["perms"].append(p)
|
||||||
|
|
||||||
|
|
||||||
|
print_dict(roles)
|
||||||
|
|
||||||
return roles
|
return roles
|
||||||
|
|
||||||
|
|
||||||
@ -686,8 +722,8 @@ def graph_create_elements(machines):
|
|||||||
data = {}
|
data = {}
|
||||||
data["_root"] = GraphElement("root", "Infrastruktur", '')
|
data["_root"] = GraphElement("root", "Infrastruktur", '')
|
||||||
data["_root"].add_role(f'{icon_admin}{admin_global["name"]}')
|
data["_root"].add_role(f'{icon_admin}{admin_global["name"]}')
|
||||||
if settings["manager_schichtleitung"] == True:
|
if settings["manager_domain"] == True:
|
||||||
data["_root"].add_role(f'{icon_manager}{manager_schichtleitung["name"]}')
|
data["_root"].add_role(f'{icon_manager}{manager_domain["name"]}')
|
||||||
|
|
||||||
for key, m in machines.items():
|
for key, m in machines.items():
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ admin_global = {
|
|||||||
"perms": ["bffh.users.manage", "bffh.users.info", "bffh.users.admin"]
|
"perms": ["bffh.users.manage", "bffh.users.info", "bffh.users.admin"]
|
||||||
}
|
}
|
||||||
|
|
||||||
manager_schichtleitung = {
|
manager_domain = {
|
||||||
"id": "_manager_schichtleitung",
|
"id": "_manager_schichtleitung",
|
||||||
"name": "_Manager Schichtleitung",
|
"name": "_Manager Schichtleitung",
|
||||||
"perms": []
|
"perms": []
|
||||||
|
@ -50,7 +50,7 @@ def list_join(my_list, insert):
|
|||||||
return my_string
|
return my_string
|
||||||
|
|
||||||
# CSV einlesen: Erzeugt eine Liste, die für jede Zeile ein Dictionary mit Header und Value ausgibt
|
# CSV einlesen: Erzeugt eine Liste, die für jede Zeile ein Dictionary mit Header und Value ausgibt
|
||||||
def csv_listdict(filename, replacedict = {}):
|
def csv_listdict(filename, csv_delimiter, replacedict = {}):
|
||||||
|
|
||||||
csvfile = open(filename, 'r', encoding='utf-8-sig')
|
csvfile = open(filename, 'r', encoding='utf-8-sig')
|
||||||
tempfile = ''
|
tempfile = ''
|
||||||
@ -75,7 +75,7 @@ def csv_listdict(filename, replacedict = {}):
|
|||||||
|
|
||||||
# Dictionary bilden
|
# Dictionary bilden
|
||||||
csvfile = open(filename, mode='r', encoding='utf-8-sig')
|
csvfile = open(filename, mode='r', encoding='utf-8-sig')
|
||||||
reader = csv.DictReader(csvfile, delimiter=';')
|
reader = csv.DictReader(csvfile, delimiter=csv_delimiter)
|
||||||
|
|
||||||
finaldata = []
|
finaldata = []
|
||||||
|
|
||||||
@ -181,12 +181,6 @@ def config_load(file, section = 'all'):
|
|||||||
|
|
||||||
return dict_settings
|
return dict_settings
|
||||||
|
|
||||||
|
|
||||||
# ------------------ ALT ---------------
|
|
||||||
|
|
||||||
|
|
||||||
# Maschinen-Dictionary sortieren
|
|
||||||
|
|
||||||
# Actor-Library einlesen
|
# Actor-Library einlesen
|
||||||
def load_actors(file):
|
def load_actors(file):
|
||||||
dict_actors = {}
|
dict_actors = {}
|
||||||
|
22
settings.ini
22
settings.ini
@ -3,25 +3,31 @@
|
|||||||
; Einstellung inkativ = False
|
; Einstellung inkativ = False
|
||||||
|
|
||||||
[generator]
|
[generator]
|
||||||
; Verwendung mehrer Domänen. Bei Verwendung mehrer Domänen werden einzelne Admins nur für die Domäne erstellt
|
; CSV-Trennzeichen. Bei Ververwendung des Kommas als Trennzeichen müssen Beschreibungstexte in Anführungszeichen gesetzt werden.
|
||||||
|
csv_delimiter = ;
|
||||||
|
|
||||||
|
; Verwendung mehrer Domänen. Bei Verwendung mehrer Domänen werden wird für jede Domäne ein Manager erstellt
|
||||||
multi_domains = False
|
multi_domains = False
|
||||||
|
|
||||||
; Rolle "Schichtleitung" erstellen, die über Manager-Berechtigungen für alle Domänen verfügt
|
; Erstellung einer Benutzerrolle für die gesamte Werkstatt. (Es werden keine Benutzerrollen für Unterbereiche/ Bereiche erstellt)
|
||||||
manager_schichtleitung = True
|
domain_user = True
|
||||||
|
|
||||||
; Manager-Rolle für jeden Bereich erstellen
|
; Manager-Rolle für die Domäne erstellen.
|
||||||
manager_area = True
|
manager_domain = True
|
||||||
|
|
||||||
|
; Manager-Rolle für jeden Bereich erstellen.
|
||||||
|
manager_area = False
|
||||||
|
|
||||||
; Spalte "Unterbereich Manager" der CSV beachten (True) der nicht (False).
|
; Spalte "Unterbereich Manager" der CSV beachten (True) der nicht (False).
|
||||||
manager_subarea = True
|
manager_subarea = False
|
||||||
|
|
||||||
; Automatisches Einfügen aller erzeugten Daten (Maschinen, Rolle, Aktoren, Aktor-Verbindungen) in die bffh.dhall
|
; Automatisches Einfügen aller erzeugten Daten (Maschinen, Rolle, Aktoren, Aktor-Verbindungen) in die bffh.dhall
|
||||||
; Die Datei muss über Platzhalter verfügen, siehe Beispieldatei ( /docs/bffh-vorlage.dhall )
|
; Die Datei muss über Platzhalter verfügen, siehe Beispieldatei ( /docs/bffh-vorlage.dhall )
|
||||||
fa_update_dhall = False
|
fa_dhall_update = True
|
||||||
|
|
||||||
; Pfad zur bffh.dall von FabAccess. Der Pfad muss vollständig sein und die bffh.dhall beinhalten.
|
; Pfad zur bffh.dall von FabAccess. Der Pfad muss vollständig sein und die bffh.dhall beinhalten.
|
||||||
; Beispiel: D:\FabAccess\config\bffh\bffh.dhall bzw. /home/fabaccess/bffh/bffh.dhall
|
; Beispiel: D:\FabAccess\config\bffh\bffh.dhall bzw. /home/fabaccess/bffh/bffh.dhall
|
||||||
fa_dhall_file =
|
fa_dhall_file = F:\Git\fabaccess-docker\config\bffh\bffh.dhall
|
||||||
|
|
||||||
; Mermaid-Code erzeugen
|
; Mermaid-Code erzeugen
|
||||||
generate_mermaid = True
|
generate_mermaid = True
|
||||||
|
Loading…
x
Reference in New Issue
Block a user