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