Permission fix
This commit is contained in:
98
inspect_current_state.py
Normal file
98
inspect_current_state.py
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Inspect current database state to understand the duplicate key issue
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
from sqlalchemy import create_engine, text
|
||||||
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
# Use dev server database
|
||||||
|
DATABASE_URL = "postgresql://postgres:RchhcpaUKZuZuMOvB5kwCP1weLBnAG6tNMXE5FHdk8AwCvolBMALYFVYRM7WCl9x@10.9.23.11:5001/membership_demo"
|
||||||
|
|
||||||
|
engine = create_engine(DATABASE_URL)
|
||||||
|
Session = sessionmaker(bind=engine)
|
||||||
|
db = Session()
|
||||||
|
|
||||||
|
print("=" * 80)
|
||||||
|
print("DATABASE STATE INSPECTION")
|
||||||
|
print("=" * 80)
|
||||||
|
|
||||||
|
# Check current counts
|
||||||
|
result = db.execute(text("SELECT COUNT(*) FROM permissions"))
|
||||||
|
perm_count = result.scalar()
|
||||||
|
print(f"\nTotal permissions: {perm_count}")
|
||||||
|
|
||||||
|
result = db.execute(text("SELECT COUNT(*) FROM role_permissions"))
|
||||||
|
rp_count = result.scalar()
|
||||||
|
print(f"Total role_permissions: {rp_count}")
|
||||||
|
|
||||||
|
if rp_count > 0:
|
||||||
|
print("\n" + "=" * 80)
|
||||||
|
print("CURRENT ROLE-PERMISSION MAPPINGS (grouped by role)")
|
||||||
|
print("=" * 80)
|
||||||
|
|
||||||
|
result = db.execute(text("""
|
||||||
|
SELECT
|
||||||
|
rp.role,
|
||||||
|
r.name as role_name,
|
||||||
|
COUNT(*) as permission_count
|
||||||
|
FROM role_permissions rp
|
||||||
|
LEFT JOIN roles r ON rp.role_id = r.id
|
||||||
|
GROUP BY rp.role, r.name
|
||||||
|
ORDER BY rp.role
|
||||||
|
"""))
|
||||||
|
|
||||||
|
for row in result.fetchall():
|
||||||
|
print(f" {row[0]:15} ({row[1]:20}): {row[2]} permissions")
|
||||||
|
|
||||||
|
print("\n" + "=" * 80)
|
||||||
|
print("CHECKING FOR DUPLICATES")
|
||||||
|
print("=" * 80)
|
||||||
|
|
||||||
|
# Check if there are actual duplicates
|
||||||
|
result = db.execute(text("""
|
||||||
|
SELECT role, permission_id, COUNT(*) as count
|
||||||
|
FROM role_permissions
|
||||||
|
GROUP BY role, permission_id
|
||||||
|
HAVING COUNT(*) > 1
|
||||||
|
"""))
|
||||||
|
|
||||||
|
duplicates = result.fetchall()
|
||||||
|
if duplicates:
|
||||||
|
print(f"\n⚠️ Found {len(duplicates)} duplicate (role, permission_id) pairs:")
|
||||||
|
for dup in duplicates[:10]: # Show first 10
|
||||||
|
print(f" role={dup[0]}, permission_id={dup[1]}, count={dup[2]}")
|
||||||
|
else:
|
||||||
|
print("\n✓ No duplicate (role, permission_id) pairs found")
|
||||||
|
|
||||||
|
print("\n" + "=" * 80)
|
||||||
|
print("CHECKING SPECIFIC ADMIN PERMISSIONS")
|
||||||
|
print("=" * 80)
|
||||||
|
|
||||||
|
# Check how many admin permissions exist
|
||||||
|
result = db.execute(text("""
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM role_permissions
|
||||||
|
WHERE role = 'admin'
|
||||||
|
"""))
|
||||||
|
admin_count = result.scalar()
|
||||||
|
print(f"\nAdmin has {admin_count} permission assignments")
|
||||||
|
|
||||||
|
# Check if the specific permission mentioned in error exists
|
||||||
|
result = db.execute(text("""
|
||||||
|
SELECT rp.id, rp.role, p.code, p.name
|
||||||
|
FROM role_permissions rp
|
||||||
|
JOIN permissions p ON rp.permission_id = p.id
|
||||||
|
WHERE rp.role = 'admin'
|
||||||
|
ORDER BY p.code
|
||||||
|
LIMIT 20
|
||||||
|
"""))
|
||||||
|
|
||||||
|
print("\nFirst 20 admin permissions:")
|
||||||
|
for row in result.fetchall():
|
||||||
|
print(f" {row[1]:10} -> {row[2]:30} ({row[3]})")
|
||||||
|
|
||||||
|
db.close()
|
||||||
Reference in New Issue
Block a user