diff --git a/static/js/permissions.js b/static/js/permissions.js index 1f5905a..8a30fff 100644 --- a/static/js/permissions.js +++ b/static/js/permissions.js @@ -155,9 +155,10 @@ window.app = Vue.createApp({ async loadAccounts() { try { + // Admin permissions UI needs to see virtual accounts to grant permissions on them const response = await LNbits.api.request( 'GET', - '/castle/api/v1/accounts', + '/castle/api/v1/accounts?exclude_virtual=false', this.g.user.wallets[0].inkey ) this.accounts = response.data diff --git a/views_api.py b/views_api.py index 0964996..2517895 100644 --- a/views_api.py +++ b/views_api.py @@ -140,9 +140,15 @@ async def api_get_accounts( - exclude_virtual: If true, exclude virtual parent accounts (default True) - Returns AccountWithPermissions objects when filter_by_user=true, otherwise Account objects """ + from lnbits.settings import settings as lnbits_settings + all_accounts = await get_all_accounts() - if not filter_by_user: + user_id = wallet.wallet.user + is_super_user = user_id == lnbits_settings.super_user + + # Super users bypass permission filtering - they see everything + if not filter_by_user or is_super_user: # Filter out virtual accounts if requested (default behavior for user views) if exclude_virtual: all_accounts = [acc for acc in all_accounts if not acc.is_virtual] @@ -151,7 +157,6 @@ async def api_get_accounts( # Filter by user permissions # NOTE: Do NOT filter out virtual accounts yet - they're needed for inheritance logic - user_id = wallet.wallet.user user_permissions = await get_user_permissions(user_id) # Get set of account IDs the user has any permission on