143 lines
5.4 KiB
Python
Executable File
143 lines
5.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import mariadb
|
|
import os
|
|
import sys
|
|
|
|
# Add the app directory to the path so we can import our permissions module
|
|
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
|
|
|
|
from permissions import APP_PERMISSIONS, ROLE_HIERARCHY, ACTIONS, get_all_permissions, get_default_permissions_for_role
|
|
|
|
def get_external_db_connection():
|
|
"""Reads the external_server.conf file and returns a MariaDB database connection."""
|
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
instance_folder = os.path.join(current_dir, '../../instance')
|
|
settings_file = os.path.join(instance_folder, 'external_server.conf')
|
|
|
|
if not os.path.exists(settings_file):
|
|
raise FileNotFoundError(f"The external_server.conf file is missing: {settings_file}")
|
|
|
|
settings = {}
|
|
with open(settings_file, 'r') as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
if line and '=' in line:
|
|
key, value = line.split('=', 1)
|
|
settings[key] = value
|
|
|
|
return mariadb.connect(
|
|
user=settings['username'],
|
|
password=settings['password'],
|
|
host=settings['server_domain'],
|
|
port=int(settings['port']),
|
|
database=settings['database_name']
|
|
)
|
|
|
|
def main():
|
|
try:
|
|
print("=== Populating Permission System ===")
|
|
conn = get_external_db_connection()
|
|
cursor = conn.cursor()
|
|
|
|
# 1. Populate all permissions
|
|
print("\n1. Populating permissions...")
|
|
permissions = get_all_permissions()
|
|
|
|
for perm in permissions:
|
|
try:
|
|
cursor.execute('''
|
|
INSERT INTO permissions (permission_key, page, page_name, section, section_name, action, action_name)
|
|
VALUES (%s, %s, %s, %s, %s, %s, %s)
|
|
ON DUPLICATE KEY UPDATE
|
|
page_name = VALUES(page_name),
|
|
section_name = VALUES(section_name),
|
|
action_name = VALUES(action_name),
|
|
updated_at = CURRENT_TIMESTAMP
|
|
''', (
|
|
perm['key'],
|
|
perm['page'],
|
|
perm['page_name'],
|
|
perm['section'],
|
|
perm['section_name'],
|
|
perm['action'],
|
|
perm['action_name']
|
|
))
|
|
except Exception as e:
|
|
print(f" ⚠ Error inserting permission {perm['key']}: {e}")
|
|
|
|
conn.commit()
|
|
print(f" ✓ Populated {len(permissions)} permissions")
|
|
|
|
# 2. Populate role hierarchy
|
|
print("\n2. Populating role hierarchy...")
|
|
for role_name, role_data in ROLE_HIERARCHY.items():
|
|
try:
|
|
cursor.execute('''
|
|
INSERT INTO role_hierarchy (role_name, display_name, description, level)
|
|
VALUES (%s, %s, %s, %s)
|
|
ON DUPLICATE KEY UPDATE
|
|
display_name = VALUES(display_name),
|
|
description = VALUES(description),
|
|
level = VALUES(level),
|
|
updated_at = CURRENT_TIMESTAMP
|
|
''', (
|
|
role_name,
|
|
role_data['name'],
|
|
role_data['description'],
|
|
role_data['level']
|
|
))
|
|
except Exception as e:
|
|
print(f" ⚠ Error inserting role {role_name}: {e}")
|
|
|
|
conn.commit()
|
|
print(f" ✓ Populated {len(ROLE_HIERARCHY)} roles")
|
|
|
|
# 3. Set default permissions for each role
|
|
print("\n3. Setting default role permissions...")
|
|
for role_name in ROLE_HIERARCHY.keys():
|
|
default_permissions = get_default_permissions_for_role(role_name)
|
|
|
|
print(f" Setting permissions for {role_name}: {len(default_permissions)} permissions")
|
|
|
|
for permission_key in default_permissions:
|
|
try:
|
|
cursor.execute('''
|
|
INSERT INTO role_permissions (role, permission_key, granted, granted_by)
|
|
VALUES (%s, %s, TRUE, 'system')
|
|
ON DUPLICATE KEY UPDATE
|
|
granted = TRUE,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
''', (role_name, permission_key))
|
|
except Exception as e:
|
|
print(f" ⚠ Error setting permission {permission_key} for {role_name}: {e}")
|
|
|
|
conn.commit()
|
|
|
|
# 4. Show summary
|
|
print("\n4. Permission Summary:")
|
|
cursor.execute('''
|
|
SELECT r.role_name, r.display_name, COUNT(rp.permission_key) as permission_count
|
|
FROM role_hierarchy r
|
|
LEFT JOIN role_permissions rp ON r.role_name = rp.role AND rp.granted = TRUE
|
|
GROUP BY r.role_name, r.display_name
|
|
ORDER BY r.level DESC
|
|
''')
|
|
|
|
results = cursor.fetchall()
|
|
for role_name, display_name, count in results:
|
|
print(f" {display_name} ({role_name}): {count} permissions")
|
|
|
|
conn.close()
|
|
print("\n=== Permission System Initialization Complete ===")
|
|
|
|
except Exception as e:
|
|
print(f"❌ Error: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return 1
|
|
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main()) |