Browse Source

Merge pull request #24459 from abpframework/issue-24299

Resource Based Permission - Angular UI Issue 24299
pull/24492/head
oykuermann 1 month ago
committed by GitHub
parent
commit
53c93e7929
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json
  2. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/cs.json
  3. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json
  4. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/el.json
  5. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json
  6. 11
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json
  7. 11
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/es.json
  8. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fa.json
  9. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fi.json
  10. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fr.json
  11. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hi.json
  12. 11
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hr.json
  13. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hu.json
  14. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/is.json
  15. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/it.json
  16. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json
  17. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pl-PL.json
  18. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pt-BR.json
  19. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json
  20. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ru.json
  21. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sk.json
  22. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sl.json
  23. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sv.json
  24. 11
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json
  25. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/vi.json
  26. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hans.json
  27. 9
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json
  28. 6
      npm/ng-packs/packages/components/lookup/ng-package.json
  29. 45
      npm/ng-packs/packages/components/lookup/src/lib/lookup-search.component.html
  30. 5
      npm/ng-packs/packages/components/lookup/src/lib/lookup-search.component.scss
  31. 136
      npm/ng-packs/packages/components/lookup/src/lib/lookup-search.component.ts
  32. 1
      npm/ng-packs/packages/components/lookup/src/public-api.ts
  33. 9741
      npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json
  34. 63
      npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/models.ts
  35. 88
      npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/permissions.service.ts
  36. 5
      npm/ng-packs/packages/permission-management/src/lib/components/index.ts
  37. 25
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.html
  38. 4
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.scss
  39. 24
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.ts
  40. 4
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.html
  41. 61
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.ts
  42. 28
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.html
  43. 31
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.ts
  44. 41
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.html
  45. 33
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.ts
  46. 60
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.html
  47. 217
      npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.ts
  48. 34
      npm/ng-packs/packages/permission-management/src/lib/defaults/default-resource-permission-entity-props.ts
  49. 1
      npm/ng-packs/packages/permission-management/src/lib/defaults/index.ts
  50. 1
      npm/ng-packs/packages/permission-management/src/lib/enums/components.ts
  51. 2
      npm/ng-packs/packages/permission-management/src/lib/enums/index.ts
  52. 5
      npm/ng-packs/packages/permission-management/src/lib/enums/view-modes.ts
  53. 23
      npm/ng-packs/packages/permission-management/src/lib/services/extensions.service.ts
  54. 2
      npm/ng-packs/packages/permission-management/src/lib/services/index.ts
  55. 164
      npm/ng-packs/packages/permission-management/src/lib/services/resource-permission-state.service.ts
  56. 17
      npm/ng-packs/packages/permission-management/src/lib/tokens/extensions.token.ts
  57. 1
      npm/ng-packs/packages/permission-management/src/lib/tokens/index.ts
  58. 1
      npm/ng-packs/tsconfig.base.json

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "تحديث الإذن",
"GrantAllResourcePermissions": "منح الكل",
"NoResourceProviderKeyLookupServiceFound": "لم يتم العثور على خدمة البحث عن مفتاح المزود",
"NoResourcePermissionFound": "لا توجد أي أذونات محددة."
"NoResourcePermissionFound": "لا توجد أي أذونات محددة.",
"UpdatePermission": "تحديث الإذن",
"NoPermissionsAssigned": "لم يتم تعيين أذونات",
"SelectProvider": "اختر المزود",
"SearchProviderKey": "بحث عن مفتاح المزود",
"Provider": "المزود",
"ErrorLoadingPermissions": "خطأ في تحميل الأذونات",
"PleaseSelectProviderAndPermissions": "يرجى اختيار المزود والأذونات"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/cs.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Aktualizovat oprávnění",
"GrantAllResourcePermissions": "Udělit vše",
"NoResourceProviderKeyLookupServiceFound": "Nebyla nalezena služba pro vyhledávání klíče poskytovatele zdrojů",
"NoResourcePermissionFound": "Pro aktuální prostředek není definováno žádné oprávnění."
"NoResourcePermissionFound": "Pro aktuální prostředek není definováno žádné oprávnění.",
"UpdatePermission": "Aktualizovat oprávnění",
"NoPermissionsAssigned": "Nejsou přiřazena žádná oprávnění",
"SelectProvider": "Vybrat poskytovatele",
"SearchProviderKey": "Hledat klíč poskytovatele",
"Provider": "Poskytovatel",
"ErrorLoadingPermissions": "Chyba při načítání oprávnění",
"PleaseSelectProviderAndPermissions": "Vyberte prosím poskytovatele a oprávnění"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Berechtigung aktualisieren",
"GrantAllResourcePermissions": "Alle gewähren",
"NoResourceProviderKeyLookupServiceFound": "Es wurde kein Dienst zum Nachschlagen des Anbieterschlüssels gefunden",
"NoResourcePermissionFound": "Es ist keine Berechtigung definiert."
"NoResourcePermissionFound": "Es ist keine Berechtigung definiert.",
"UpdatePermission": "Berechtigung aktualisieren",
"NoPermissionsAssigned": "Keine Berechtigungen zugewiesen",
"SelectProvider": "Anbieter auswählen",
"SearchProviderKey": "Anbieterschlüssel suchen",
"Provider": "Anbieter",
"ErrorLoadingPermissions": "Fehler beim Laden der Berechtigungen",
"PleaseSelectProviderAndPermissions": "Bitte wählen Sie einen Anbieter und Berechtigungen aus"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/el.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Ενημέρωση δικαιώματος",
"GrantAllResourcePermissions": "Παραχώρηση όλων",
"NoResourceProviderKeyLookupServiceFound": "Δεν βρέθηκε υπηρεσία αναζήτησης κλειδιού παρόχου",
"NoResourcePermissionFound": "Δεν έχει οριστεί καμία άδεια."
"NoResourcePermissionFound": "Δεν έχει οριστεί καμία άδεια.",
"UpdatePermission": "Ενημέρωση δικαιώματος",
"NoPermissionsAssigned": "Δεν έχουν εκχωρηθεί δικαιώματα",
"SelectProvider": "Επιλέξτε πάροχο",
"SearchProviderKey": "Αναζήτηση κλειδιού παρόχου",
"Provider": "Πάροχος",
"ErrorLoadingPermissions": "Σφάλμα κατά τη φόρτωση δικαιωμάτων",
"PleaseSelectProviderAndPermissions": "Επιλέξτε πάροχο και δικαιώματα"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Update permission",
"GrantAllResourcePermissions": "Grant all",
"NoResourceProviderKeyLookupServiceFound": "There is no provider key lookup service was found",
"NoResourcePermissionFound": "There is no permission defined."
"NoResourcePermissionFound": "There is no permission defined.",
"UpdatePermission": "Update permission",
"NoPermissionsAssigned": "No permissions assigned",
"SelectProvider": "Select provider",
"SearchProviderKey": "Search provider key",
"Provider": "Provider",
"ErrorLoadingPermissions": "Error loading permissions",
"PleaseSelectProviderAndPermissions": "Please select provider and permissions"
}
}

11
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Update permission",
"GrantAllResourcePermissions": "Grant all",
"NoResourceProviderKeyLookupServiceFound": "There is no provider key lookup service was found",
"NoResourcePermissionFound": "There is no permission defined."
"NoResourcePermissionFound": "There is no permission defined.",
"UpdatePermission": "Update permission",
"NoPermissionsAssigned": "No permissions assigned",
"SelectProvider": "Select provider",
"SearchProviderKey": "Search provider key",
"Provider": "Provider",
"ErrorLoadingPermissions": "Error loading permissions",
"PleaseSelectProviderAndPermissions": "Please select provider and permissions"
}
}
}

11
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/es.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Actualizar permiso",
"GrantAllResourcePermissions": "Conceder todos",
"NoResourceProviderKeyLookupServiceFound": "No se encontró ningún servicio de búsqueda de clave de proveedor",
"NoResourcePermissionFound": "No hay ningún permiso definido."
"NoResourcePermissionFound": "No hay ningún permiso definido.",
"UpdatePermission": "Actualizar permiso",
"NoPermissionsAssigned": "No hay permisos asignados",
"SelectProvider": "Seleccionar proveedor",
"SearchProviderKey": "Buscar clave de proveedor",
"Provider": "Proveedor",
"ErrorLoadingPermissions": "Error al cargar permisos",
"PleaseSelectProviderAndPermissions": "Por favor, selecciona proveedor y permisos"
}
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fa.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "به‌روزرسانی مجوز",
"GrantAllResourcePermissions": "اعطای همه",
"NoResourceProviderKeyLookupServiceFound": "هیچ سرویس جستجوی کلید ارائه‌دهنده یافت نشد",
"NoResourcePermissionFound": "هیچ مجوزی تعریف نشده است."
"NoResourcePermissionFound": "هیچ مجوزی تعریف نشده است.",
"UpdatePermission": "به‌روزرسانی مجوز",
"NoPermissionsAssigned": "هیچ مجوزی اختصاص داده نشده است",
"SelectProvider": "انتخاب کننده‌",
"SearchProviderKey": "جستجوی کلید تامین‌کننده",
"Provider": "تامین‌کننده",
"ErrorLoadingPermissions": "خطا در بارگذاری مجوزها",
"PleaseSelectProviderAndPermissions": "لطفاً تامین‌کننده و مجوزها را انتخاب کنید"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fi.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Päivitä käyttöoikeus",
"GrantAllResourcePermissions": "Myönnä kaikki",
"NoResourceProviderKeyLookupServiceFound": "Palveluntarjoajan avaimen hakupalvelua ei löytynyt",
"NoResourcePermissionFound": "Ei käyttöoikeuksia määritetty."
"NoResourcePermissionFound": "Ei käyttöoikeuksia määritetty.",
"UpdatePermission": "Päivitä lupa",
"NoPermissionsAssigned": "Ei osoitettuja oikeuksia",
"SelectProvider": "Valitse palveluntarjoaja",
"SearchProviderKey": "Hae palveluntarjoajan avainta",
"Provider": "Palveluntarjoaja",
"ErrorLoadingPermissions": "Virhe ladataessa oikeuksia",
"PleaseSelectProviderAndPermissions": "Valitse palveluntarjoaja ja oikeudet"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fr.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Mettre à jour l'autorisation",
"GrantAllResourcePermissions": "Accorder tout",
"NoResourceProviderKeyLookupServiceFound": "Aucun service de recherche de clé de fournisseur n'a été trouvé",
"NoResourcePermissionFound": "Aucune autorisation n'est définie."
"NoResourcePermissionFound": "Aucune autorisation n'est définie.",
"UpdatePermission": "Mettre à jour l'autorisation",
"NoPermissionsAssigned": "Aucune autorisation assignée",
"SelectProvider": "Sélectionner le fournisseur",
"SearchProviderKey": "Rechercher la clé du fournisseur",
"Provider": "Fournisseur",
"ErrorLoadingPermissions": "Erreur lors du chargement des autorisations",
"PleaseSelectProviderAndPermissions": "Veuillez sélectionner le fournisseur et les autorisations"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hi.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "अनुमति अपडेट करें",
"GrantAllResourcePermissions": "सभी प्रदान करें",
"NoResourceProviderKeyLookupServiceFound": "कोई प्रदाता कुंजी खोज सेवा नहीं मिली",
"NoResourcePermissionFound": "कोई अनुमति परिभाषित नहीं है।"
"NoResourcePermissionFound": "कोई अनुमति परिभाषित नहीं है।",
"UpdatePermission": "अनुमति अपडेट करें",
"NoPermissionsAssigned": "कोई अनुमति असाइन नहीं की गई",
"SelectProvider": "प्रदाता चुनें",
"SearchProviderKey": "प्रदाता कुंजी खोजें",
"Provider": "प्रदाता",
"ErrorLoadingPermissions": "अनुमतियाँ लोड करने में त्रुटि",
"PleaseSelectProviderAndPermissions": "कृपया प्रदाता और अनुमतियाँ चुनें"
}
}

11
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hr.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Ažuriraj dozvolu",
"GrantAllResourcePermissions": "Dodijeli sve",
"NoResourceProviderKeyLookupServiceFound": "Nije pronađena usluga za pronalaženje ključa pružatelja",
"NoResourcePermissionFound": "Nijedna dozvola nije definirana."
"NoResourcePermissionFound": "Nijedna dozvola nije definirana.",
"UpdatePermission": "Ažuriraj dopuštenje",
"NoPermissionsAssigned": "Nema dodijeljenih dopuštenja",
"SelectProvider": "Odaberi pružatelja",
"SearchProviderKey": "Traži ključ pružatelja",
"Provider": "Pružatelj",
"ErrorLoadingPermissions": "Pogreška pri učitavanju dopuštenja",
"PleaseSelectProviderAndPermissions": "Molimo odaberite pružatelja i dopuštenja"
}
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hu.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Engedély frissítése",
"GrantAllResourcePermissions": "Összes engedély megadása",
"NoResourceProviderKeyLookupServiceFound": "Nem található szolgáltató kulcs kereső szolgáltatás",
"NoResourcePermissionFound": "Nincs meghatározva engedély."
"NoResourcePermissionFound": "Nincs meghatározva engedély.",
"UpdatePermission": "Jogosultság frissítése",
"NoPermissionsAssigned": "Nincsenek jogosultságok hozzárendelve",
"SelectProvider": "Szolgáltató kiválasztása",
"SearchProviderKey": "Szolgáltatói kulcs keresése",
"Provider": "Szolgáltató",
"ErrorLoadingPermissions": "Hiba a jogosultságok betöltésekor",
"PleaseSelectProviderAndPermissions": "Kérjük, válassza ki a szolgáltatót és a jogosultságokat"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/is.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Uppfæra heimild",
"GrantAllResourcePermissions": "Veita allt",
"NoResourceProviderKeyLookupServiceFound": "Engin þjónusta fannst til að leita að lykli veitanda",
"NoResourcePermissionFound": "Engin heimild er skilgreind."
"NoResourcePermissionFound": "Engin heimild er skilgreind.",
"UpdatePermission": "Uppfæra leyfi",
"NoPermissionsAssigned": "Engar heimildir skráðar",
"SelectProvider": "Velja þjónustuaðila",
"SearchProviderKey": "Leita að lykli þjónustuaðila",
"Provider": "Þjónustuaðili",
"ErrorLoadingPermissions": "Villa við að hlaða leyfum",
"PleaseSelectProviderAndPermissions": "Vinsamlegast veldu þjónustuaðila og leyfi"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/it.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Aggiorna autorizzazione",
"GrantAllResourcePermissions": "Concedi tutto",
"NoResourceProviderKeyLookupServiceFound": "Non è stato trovato alcun servizio di ricerca chiave del provider",
"NoResourcePermissionFound": "Non è definita alcuna autorizzazione."
"NoResourcePermissionFound": "Non è definita alcuna autorizzazione.",
"UpdatePermission": "Aggiorna permesso",
"NoPermissionsAssigned": "Nessun permesso assegnato",
"SelectProvider": "Seleziona fornitore",
"SearchProviderKey": "Cerca chiave fornitore",
"Provider": "Fornitore",
"ErrorLoadingPermissions": "Errore durante il caricamento dei permessi",
"PleaseSelectProviderAndPermissions": "Selezionare fornitore e permessi"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Recht bijwerken",
"GrantAllResourcePermissions": "Alles toekennen",
"NoResourceProviderKeyLookupServiceFound": "Er is geen service gevonden voor het opzoeken van de sleutel van de provider",
"NoResourcePermissionFound": "Er is geen machtiging gedefinieerd."
"NoResourcePermissionFound": "Er is geen machtiging gedefinieerd.",
"UpdatePermission": "Machtiging bijwerken",
"NoPermissionsAssigned": "Geen machtigingen toegewezen",
"SelectProvider": "Selecteer provider",
"SearchProviderKey": "Zoek provider sleutel",
"Provider": "Provider",
"ErrorLoadingPermissions": "Fout bij laden van machtigingen",
"PleaseSelectProviderAndPermissions": "Selecteer provider en machtigingen"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pl-PL.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Zaktualizuj uprawnienie",
"GrantAllResourcePermissions": "Przyznaj wszystko",
"NoResourceProviderKeyLookupServiceFound": "Nie znaleziono usługi wyszukiwania klucza dostawcy",
"NoResourcePermissionFound": "Nie zdefiniowano żadnych uprawnień."
"NoResourcePermissionFound": "Nie zdefiniowano żadnych uprawnień.",
"UpdatePermission": "Aktualizuj uprawnienie",
"NoPermissionsAssigned": "Brak przypisanych uprawnień",
"SelectProvider": "Wybierz dostawcę",
"SearchProviderKey": "Szukaj klucza dostawcy",
"Provider": "Dostawca",
"ErrorLoadingPermissions": "Błąd podczas ładowania uprawnień",
"PleaseSelectProviderAndPermissions": "Wybierz dostawcę i uprawnienia"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pt-BR.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Atualizar permissão",
"GrantAllResourcePermissions": "Conceder tudo",
"NoResourceProviderKeyLookupServiceFound": "Nenhum serviço de pesquisa de chave do provedor foi encontrado",
"NoResourcePermissionFound": "Nenhuma permissão foi definida."
"NoResourcePermissionFound": "Nenhuma permissão foi definida.",
"UpdatePermission": "Atualizar permissão",
"NoPermissionsAssigned": "Nenhuma permissão atribuída",
"SelectProvider": "Selecionar provedor",
"SearchProviderKey": "Pesquisar chave do provedor",
"Provider": "Provedor",
"ErrorLoadingPermissions": "Erro ao carregar permissões",
"PleaseSelectProviderAndPermissions": "Por favor, selecione o provedor e as permissões"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Actualizați permisiunea",
"GrantAllResourcePermissions": "Acordați toate",
"NoResourceProviderKeyLookupServiceFound": "Nu a fost găsit niciun serviciu de căutare a cheii furnizorului",
"NoResourcePermissionFound": "Nu există nicio permisiune definită."
"NoResourcePermissionFound": "Nu există nicio permisiune definită.",
"UpdatePermission": "Actualizează permisiunea",
"NoPermissionsAssigned": "Nicio permisiune atribuită",
"SelectProvider": "Selectează furnizor",
"SearchProviderKey": "Caută cheie furnizor",
"Provider": "Furnizor",
"ErrorLoadingPermissions": "Eroare la încărcarea permisiunilor",
"PleaseSelectProviderAndPermissions": "Vă rugăm să selectați furnizorul și permisiunile"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ru.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Обновить разрешение",
"GrantAllResourcePermissions": "Предоставить все",
"NoResourceProviderKeyLookupServiceFound": "Служба поиска ключа поставщика не найдена",
"NoResourcePermissionFound": "Не определено ни одного разрешения."
"NoResourcePermissionFound": "Не определено ни одного разрешения.",
"UpdatePermission": "Обновить разрешение",
"NoPermissionsAssigned": "Нет назначенных разрешений",
"SelectProvider": "Выбрать провайдера",
"SearchProviderKey": "Поиск ключа провайдера",
"Provider": "Провайдер",
"ErrorLoadingPermissions": "Ошибка при загрузке разрешений",
"PleaseSelectProviderAndPermissions": "Пожалуйста, выберите провайдера и разрешения"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sk.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Aktualizovať oprávnenie",
"GrantAllResourcePermissions": "Udeľ všetko",
"NoResourceProviderKeyLookupServiceFound": "Nebola nájdená služba na vyhľadávanie kľúča poskytovateľa",
"NoResourcePermissionFound": "Nie je definované žiadne povolenie."
"NoResourcePermissionFound": "Nie je definované žiadne povolenie.",
"UpdatePermission": "Aktualizovať oprávnenie",
"NoPermissionsAssigned": "Nie sú priradené žiadne oprávnenia",
"SelectProvider": "Vybrat poskytovateľa",
"SearchProviderKey": "Hľadať kľúč poskytovateľa",
"Provider": "Poskytovateľ",
"ErrorLoadingPermissions": "Chyba pri načítaní oprávnení",
"PleaseSelectProviderAndPermissions": "Vyberte poskytovateľa a oprávnenia"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sl.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Posodobi dovoljenje",
"GrantAllResourcePermissions": "Dodeli vse",
"NoResourceProviderKeyLookupServiceFound": "Ni bilo mogoče najti storitve za iskanje ključa ponudnika",
"NoResourcePermissionFound": "Nobeno dovoljenje ni določeno."
"NoResourcePermissionFound": "Nobeno dovoljenje ni določeno.",
"UpdatePermission": "Posodobi dovoljenje",
"NoPermissionsAssigned": "Ni dodeljenih dovoljenj",
"SelectProvider": "Izberi ponudnika",
"SearchProviderKey": "Išči ključ ponudnika",
"Provider": "Ponudnik",
"ErrorLoadingPermissions": "Napaka pri nalaganju dovoljenj",
"PleaseSelectProviderAndPermissions": "Izberite ponudnika in dovoljenja"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sv.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Uppdatera behörighet",
"GrantAllResourcePermissions": "Bevilja alla",
"NoResourceProviderKeyLookupServiceFound": "Ingen tjänst för att söka efter leverantörsnyckel hittades",
"NoResourcePermissionFound": "Ingen behörighet är definierad."
"NoResourcePermissionFound": "Ingen behörighet är definierad.",
"UpdatePermission": "Uppdatera behörighet",
"NoPermissionsAssigned": "Inga behörigheter tilldelade",
"SelectProvider": "Välj leverantör",
"SearchProviderKey": "Sök leverantörsnyckel",
"Provider": "Leverantör",
"ErrorLoadingPermissions": "Fel vid laddning av behörigheter",
"PleaseSelectProviderAndPermissions": "Välj leverantör och behörigheter"
}
}

11
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "İzni güncelle",
"GrantAllResourcePermissions": "Tümünü ver",
"NoResourceProviderKeyLookupServiceFound": "Herhangi bir sağlayıcı anahtar arama hizmeti bulunamadı",
"NoResourcePermissionFound": "Herhangi bir izin tanımlı değil."
"NoResourcePermissionFound": "Herhangi bir izin tanımlı değil.",
"UpdatePermission": "İzni güncelle",
"NoPermissionsAssigned": "Atanmış izin bulunamadı",
"SelectProvider": "Sağlayıcı seç",
"SearchProviderKey": "Sağlayıcı anahtarını ara",
"Provider": "Sağlayıcı",
"ErrorLoadingPermissions": "İzinler yüklenirken hata oluştu",
"PleaseSelectProviderAndPermissions": "Lütfen sağlayıcı ve izinleri seçin"
}
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/vi.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "Cập nhật quyền",
"GrantAllResourcePermissions": "Cấp tất cả",
"NoResourceProviderKeyLookupServiceFound": "Không tìm thấy dịch vụ tra cứu khóa nhà cung cấp",
"NoResourcePermissionFound": "Không có quyền nào được định nghĩa."
"NoResourcePermissionFound": "Không có quyền nào được định nghĩa.",
"UpdatePermission": "Cập nhật quyền",
"NoPermissionsAssigned": "Chưa được cấp quyền",
"SelectProvider": "Chọn nhà cung cấp",
"SearchProviderKey": "Tìm kiếm khóa nhà cung cấp",
"Provider": "Nhà cung cấp",
"ErrorLoadingPermissions": "Lỗi khi tải quyền",
"PleaseSelectProviderAndPermissions": "Vui lòng chọn nhà cung cấp và quyền"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hans.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "更新权限",
"GrantAllResourcePermissions": "授予所有",
"NoResourceProviderKeyLookupServiceFound": "未找到提供者键查找服务",
"NoResourcePermissionFound": "未定义任何权限。"
"NoResourcePermissionFound": "未定义任何权限。",
"UpdatePermission": "更新权限",
"NoPermissionsAssigned": "未分配权限",
"SelectProvider": "选择提供程序",
"SearchProviderKey": "搜索提供程序密钥",
"Provider": "提供程序",
"ErrorLoadingPermissions": "加载权限时出错",
"PleaseSelectProviderAndPermissions": "请选择提供程序和权限"
}
}

9
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json

@ -17,6 +17,13 @@
"UpdateResourcePermission": "更新權限",
"GrantAllResourcePermissions": "授予所有",
"NoResourceProviderKeyLookupServiceFound": "未找到提供者鍵查找服務",
"NoResourcePermissionFound": "未定義任何權限。"
"NoResourcePermissionFound": "未定義任何權限。",
"UpdatePermission": "更新權限",
"NoPermissionsAssigned": "未分配權限",
"SelectProvider": "選擇提供者",
"SearchProviderKey": "搜尋提供者金鑰",
"Provider": "提供者",
"ErrorLoadingPermissions": "載入權限時出錯",
"PleaseSelectProviderAndPermissions": "請選擇提供者和權限"
}
}

6
npm/ng-packs/packages/components/lookup/ng-package.json

@ -0,0 +1,6 @@
{
"$schema": "../../../node_modules/ng-packagr/ng-entrypoint.schema.json",
"lib": {
"entryFile": "src/public-api.ts"
}
}

45
npm/ng-packs/packages/components/lookup/src/lib/lookup-search.component.html

@ -0,0 +1,45 @@
<div class="abp-lookup-container position-relative">
@if (label()) {
<label class="form-label">{{ label() | abpLocalization }}</label>
}
<div class="input-group">
<input type="text" class="form-control" [placeholder]="placeholder() | abpLocalization" [ngModel]="displayValue()"
(ngModelChange)="onSearchInput($event)" (focus)="onSearchFocus()" (blur)="onSearchBlur($event)"
[disabled]="disabled()" />
@if (displayValue() && !disabled()) {
<button type="button" class="btn btn-outline-secondary" (mousedown)="clearSelection()" tabindex="-1">
<i class="fa fa-times"></i>
</button>
}
</div>
@if (showDropdown() && !disabled()) {
<div class="abp-lookup-dropdown list-group position-absolute w-100 shadow">
@if (isLoading()) {
<div class="list-group-item text-center py-3">
<i class="fa fa-spinner fa-spin me-2"></i>
{{ 'AbpUi::Loading' | abpLocalization }}
</div>
} @else if (searchResults().length > 0) {
@for (item of searchResults(); track item.key) {
<button type="button" class="list-group-item list-group-item-action" (mousedown)="selectItem(item)">
@if (itemTemplate()) {
<ng-container *ngTemplateOutlet="itemTemplate()!; context: { $implicit: item }" />
} @else {
{{ getDisplayValue(item) }}
}
</button>
}
} @else if (displayValue()) {
@if (noResultsTemplate()) {
<ng-container *ngTemplateOutlet="noResultsTemplate()!" />
} @else {
<div class="list-group-item text-muted">
{{ 'AbpUi::NoRecordsFound' | abpLocalization }}
</div>
}
}
</div>
}
</div>

5
npm/ng-packs/packages/components/lookup/src/lib/lookup-search.component.scss

@ -0,0 +1,5 @@
.abp-lookup-dropdown {
z-index: 1050;
max-height: 200px;
overflow-y: auto;
}

136
npm/ng-packs/packages/components/lookup/src/lib/lookup-search.component.ts

@ -0,0 +1,136 @@
import {
Component,
input,
output,
model,
signal,
OnInit,
ChangeDetectionStrategy,
TemplateRef,
contentChild,
DestroyRef,
inject,
} from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { LocalizationPipe } from '@abp/ng.core';
import { Subject, Observable, debounceTime, distinctUntilChanged, of, finalize } from 'rxjs';
export interface LookupItem {
key: string;
displayName: string;
[key: string]: unknown;
}
export type LookupSearchFn<T = LookupItem> = (filter: string) => Observable<T[]>;
@Component({
selector: 'abp-lookup-search',
templateUrl: './lookup-search.component.html',
styleUrl: './lookup-search.component.scss',
imports: [CommonModule, FormsModule, LocalizationPipe],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class LookupSearchComponent<T extends LookupItem = LookupItem> implements OnInit {
private readonly destroyRef = inject(DestroyRef);
readonly label = input<string>();
readonly placeholder = input<string>('');
readonly debounceTime = input<number>(300);
readonly minSearchLength = input<number>(0);
readonly displayKey = input<keyof T>('displayName' as keyof T);
readonly valueKey = input<keyof T>('key' as keyof T);
readonly disabled = input<boolean>(false);
readonly searchFn = input<LookupSearchFn<T>>(() => of([]));
readonly selectedValue = model<string>('');
readonly displayValue = model<string>('');
readonly itemSelected = output<T>();
readonly searchChanged = output<string>();
readonly itemTemplate = contentChild<TemplateRef<{ $implicit: T }>>('itemTemplate');
readonly noResultsTemplate = contentChild<TemplateRef<void>>('noResultsTemplate');
readonly searchResults = signal<T[]>([]);
readonly showDropdown = signal(false);
readonly isLoading = signal(false);
private readonly searchSubject = new Subject<string>();
ngOnInit() {
this.searchSubject.pipe(
debounceTime(this.debounceTime()),
distinctUntilChanged(),
takeUntilDestroyed(this.destroyRef)
).subscribe(filter => {
this.performSearch(filter);
});
}
onSearchInput(filter: string) {
this.displayValue.set(filter);
this.showDropdown.set(true);
this.searchChanged.emit(filter);
if (filter.length >= this.minSearchLength()) {
this.searchSubject.next(filter);
} else {
this.searchResults.set([]);
}
}
onSearchFocus() {
this.showDropdown.set(true);
const currentFilter = this.displayValue() || '';
if (currentFilter.length >= this.minSearchLength()) {
this.performSearch(currentFilter);
}
}
onSearchBlur(event: FocusEvent) {
const relatedTarget = event.relatedTarget as HTMLElement;
if (!relatedTarget?.closest('.abp-lookup-dropdown')) {
this.showDropdown.set(false);
}
}
selectItem(item: T) {
const displayKeyValue = String(item[this.displayKey()] ?? '');
const valueKeyValue = String(item[this.valueKey()] ?? '');
this.displayValue.set(displayKeyValue);
this.selectedValue.set(valueKeyValue);
this.searchResults.set([]);
this.showDropdown.set(false);
this.itemSelected.emit(item);
}
clearSelection() {
this.displayValue.set('');
this.selectedValue.set('');
this.searchResults.set([]);
}
private performSearch(filter: string) {
this.isLoading.set(true);
this.searchFn()(filter).pipe(
takeUntilDestroyed(this.destroyRef),
finalize(() => this.isLoading.set(false))
).subscribe({
next: results => {
this.searchResults.set(results);
},
error: () => {
this.searchResults.set([]);
}
});
}
getDisplayValue(item: T): string {
return String(item[this.displayKey()] ?? item[this.valueKey()] ?? '');
}
}

1
npm/ng-packs/packages/components/lookup/src/public-api.ts

@ -0,0 +1 @@
export * from './lib/lookup-search.component';

9741
npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json

File diff suppressed because it is too large

63
npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/models.ts

@ -4,6 +4,27 @@ export interface GetPermissionListResultDto {
groups: PermissionGroupDto[];
}
export interface GetResourcePermissionDefinitionListResultDto {
permissions?: ResourcePermissionDefinitionDto[];
}
export interface GetResourcePermissionListResultDto {
permissions?: ResourcePermissionGrantInfoDto[];
}
export interface GetResourcePermissionWithProviderListResultDto {
permissions?: ResourcePermissionWithProdiverGrantInfoDto[];
}
export interface GetResourceProviderListResultDto {
providers?: ResourceProviderDto[];
}
export interface GrantedResourcePermissionDto {
name?: string;
displayName?: string;
}
export interface PermissionGrantInfoDto {
name?: string;
displayName?: string;
@ -17,6 +38,8 @@ export interface PermissionGroupDto {
name?: string;
displayName?: string;
permissions: PermissionGrantInfoDto[];
displayNameKey?: string;
displayNameResource?: string;
}
export interface ProviderInfoDto {
@ -24,6 +47,40 @@ export interface ProviderInfoDto {
providerKey?: string;
}
export interface ResourcePermissionDefinitionDto {
name?: string;
displayName?: string;
}
export interface ResourcePermissionGrantInfoDto {
providerName?: string;
providerKey?: string;
providerDisplayName?: string;
providerNameDisplayName?: string;
permissions?: GrantedResourcePermissionDto[];
}
export interface ResourcePermissionWithProdiverGrantInfoDto {
name?: string;
displayName?: string;
providers?: string[];
isGranted?: boolean;
}
export interface ResourceProviderDto {
name?: string;
displayName?: string;
}
export interface SearchProviderKeyInfo {
providerKey?: string;
providerDisplayName?: string;
}
export interface SearchProviderKeyListResultDto {
keys?: SearchProviderKeyInfo[];
}
export interface UpdatePermissionDto {
name?: string;
isGranted: boolean;
@ -32,3 +89,9 @@ export interface UpdatePermissionDto {
export interface UpdatePermissionsDto {
permissions: UpdatePermissionDto[];
}
export interface UpdateResourcePermissionsDto {
providerName?: string;
providerKey?: string;
permissions?: string[];
}

88
npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/permissions.service.ts

@ -1,5 +1,5 @@
import type { GetPermissionListResultDto, UpdatePermissionsDto } from './models';
import { RestService } from '@abp/ng.core';
import type { GetPermissionListResultDto, GetResourcePermissionDefinitionListResultDto, GetResourcePermissionListResultDto, GetResourcePermissionWithProviderListResultDto, GetResourceProviderListResultDto, SearchProviderKeyListResultDto, UpdatePermissionsDto, UpdateResourcePermissionsDto } from './models';
import { RestService, Rest } from '@abp/ng.core';
import { Injectable, inject } from '@angular/core';
@Injectable({
@ -7,23 +7,97 @@ import { Injectable, inject } from '@angular/core';
})
export class PermissionsService {
private restService = inject(RestService);
apiName = 'AbpPermissionManagement';
get = (providerName: string, providerKey: string) =>
deleteResource = (resourceName: string, resourceKey: string, providerName: string, providerKey: string, config?: Partial<Rest.Config>) =>
this.restService.request<any, void>({
method: 'DELETE',
url: '/api/permission-management/permissions/resource',
params: { resourceName, resourceKey, providerName, providerKey },
},
{ apiName: this.apiName, ...config });
get = (providerName: string, providerKey: string, config?: Partial<Rest.Config>) =>
this.restService.request<any, GetPermissionListResultDto>({
method: 'GET',
url: '/api/permission-management/permissions',
params: { providerName, providerKey },
},
{ apiName: this.apiName });
{ apiName: this.apiName, ...config });
getByGroup = (groupName: string, providerName: string, providerKey: string, config?: Partial<Rest.Config>) =>
this.restService.request<any, GetPermissionListResultDto>({
method: 'GET',
url: '/api/permission-management/permissions/by-group',
params: { groupName, providerName, providerKey },
},
{ apiName: this.apiName, ...config });
getResource = (resourceName: string, resourceKey: string, config?: Partial<Rest.Config>) =>
this.restService.request<any, GetResourcePermissionListResultDto>({
method: 'GET',
url: '/api/permission-management/permissions/resource',
params: { resourceName, resourceKey },
},
{ apiName: this.apiName, ...config });
getResourceByProvider = (resourceName: string, resourceKey: string, providerName: string, providerKey: string, config?: Partial<Rest.Config>) =>
this.restService.request<any, GetResourcePermissionWithProviderListResultDto>({
method: 'GET',
url: '/api/permission-management/permissions/resource/by-provider',
params: { resourceName, resourceKey, providerName, providerKey },
},
{ apiName: this.apiName, ...config });
update = (providerName: string, providerKey: string, input: UpdatePermissionsDto) =>
getResourceDefinitions = (resourceName: string, config?: Partial<Rest.Config>) =>
this.restService.request<any, GetResourcePermissionDefinitionListResultDto>({
method: 'GET',
url: '/api/permission-management/permissions/resource-definitions',
params: { resourceName },
},
{ apiName: this.apiName, ...config });
getResourceProviderKeyLookupServices = (resourceName: string, config?: Partial<Rest.Config>) =>
this.restService.request<any, GetResourceProviderListResultDto>({
method: 'GET',
url: '/api/permission-management/permissions/resource-provider-key-lookup-services',
params: { resourceName },
},
{ apiName: this.apiName, ...config });
searchResourceProviderKey = (resourceName: string, serviceName: string, filter: string, page: number, config?: Partial<Rest.Config>) =>
this.restService.request<any, SearchProviderKeyListResultDto>({
method: 'GET',
url: '/api/permission-management/permissions/search-resource-provider-keys',
params: { resourceName, serviceName, filter, page },
},
{ apiName: this.apiName, ...config });
update = (providerName: string, providerKey: string, input: UpdatePermissionsDto, config?: Partial<Rest.Config>) =>
this.restService.request<any, void>({
method: 'PUT',
url: '/api/permission-management/permissions',
params: { providerName, providerKey },
body: input,
},
{ apiName: this.apiName });
{ apiName: this.apiName, ...config });
updateResource = (resourceName: string, resourceKey: string, input: UpdateResourcePermissionsDto, config?: Partial<Rest.Config>) =>
this.restService.request<any, void>({
method: 'PUT',
url: '/api/permission-management/permissions/resource',
params: { resourceName, resourceKey },
body: input,
},
{ apiName: this.apiName, ...config });
}

5
npm/ng-packs/packages/permission-management/src/lib/components/index.ts

@ -1 +1,6 @@
export * from './permission-management.component';
export * from './resource-permission-management/resource-permission-management.component';
export * from './resource-permission-management/provider-key-search/provider-key-search.component';
export * from './resource-permission-management/permission-checkbox-list/permission-checkbox-list.component';
export * from './resource-permission-management/resource-permission-list/resource-permission-list.component';
export * from './resource-permission-management/resource-permission-form/resource-permission-form.component';

25
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.html

@ -0,0 +1,25 @@
<div class="mb-3">
@if (showTitle()) {
<h5>{{ title() | abpLocalization }}</h5>
}
<div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" id="grantAll-{{ idPrefix() }}"
[checked]="state.allPermissionsSelected()"
(change)="state.toggleAllPermissions(!state.allPermissionsSelected())" />
<label class="form-check-label" for="grantAll-{{ idPrefix() }}">
{{ 'AbpPermissionManagement::GrantAllResourcePermissions' | abpLocalization }}
</label>
</div>
<div class="abp-permission-list-container border rounded p-3">
@for (perm of permissions(); track perm.name) {
<div class="form-check">
<input class="form-check-input" type="checkbox" id="perm-{{ idPrefix() }}-{{ perm.name }}"
[checked]="state.isPermissionSelected(perm.name || '')"
(change)="state.togglePermission(perm.name || '')" />
<label class="form-check-label" for="perm-{{ idPrefix() }}-{{ perm.name }}">
{{ perm.displayName }}
</label>
</div>
}
</div>
</div>

4
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.scss

@ -0,0 +1,4 @@
.abp-permission-list-container {
max-height: 300px;
overflow-y: auto;
}

24
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.ts

@ -0,0 +1,24 @@
import { Component, input, inject, ChangeDetectionStrategy } from '@angular/core';
import { LocalizationPipe } from '@abp/ng.core';
import { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';
interface PermissionItem {
name?: string | null;
displayName?: string | null;
}
@Component({
selector: 'abp-permission-checkbox-list',
templateUrl: './permission-checkbox-list.component.html',
styleUrl: './permission-checkbox-list.component.scss',
imports: [LocalizationPipe],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class PermissionCheckboxListComponent {
readonly state = inject(ResourcePermissionStateService);
readonly permissions = input.required<PermissionItem[]>();
readonly idPrefix = input<string>('default');
readonly title = input<string>('AbpPermissionManagement::ResourcePermissionPermissions');
readonly showTitle = input<boolean>(true);
}

4
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.html

@ -0,0 +1,4 @@
<abp-lookup-search label="AbpPermissionManagement::SearchProviderKey"
placeholder="AbpPermissionManagement::SearchProviderKey" [searchFn]="searchFn" [displayValue]="state.searchFilter()"
(displayValueChange)="state.searchFilter.set($event)" [selectedValue]="state.selectedProviderKey()"
(selectedValueChange)="state.selectedProviderKey.set($event)" (itemSelected)="onItemSelected($event)" />

61
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.ts

@ -0,0 +1,61 @@
import { Component, input, inject, OnInit, ChangeDetectionStrategy, DestroyRef } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { PermissionsService } from '@abp/ng.permission-management/proxy';
import { LookupSearchComponent, LookupItem } from '@abp/ng.components/lookup';
import { Observable, map } from 'rxjs';
import { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';
interface ProviderKeyLookupItem extends LookupItem {
providerKey: string;
providerDisplayName?: string;
}
@Component({
selector: 'abp-provider-key-search',
templateUrl: './provider-key-search.component.html',
imports: [LookupSearchComponent],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ProviderKeySearchComponent implements OnInit {
readonly state = inject(ResourcePermissionStateService);
private readonly service = inject(PermissionsService);
private readonly destroyRef = inject(DestroyRef);
readonly resourceName = input.required<string>();
searchFn: (filter: string) => Observable<ProviderKeyLookupItem[]> = () => new Observable();
ngOnInit() {
this.searchFn = (filter: string) => this.loadProviderKeys(filter);
}
onItemSelected(item: ProviderKeyLookupItem) {
// State is already updated via displayValue and selectedValue bindings
// This handler can be used for additional side effects if needed
}
private loadProviderKeys(filter: string): Observable<ProviderKeyLookupItem[]> {
const providerName = this.state.selectedProviderName();
if (!providerName) {
return new Observable(subscriber => {
subscriber.next([]);
subscriber.complete();
});
}
return this.service.searchResourceProviderKey(
this.resourceName(),
providerName,
filter,
1
).pipe(
map(res => (res.keys || []).map(k => ({
key: k.providerKey || '',
displayName: k.providerDisplayName || k.providerKey || '',
providerKey: k.providerKey || '',
providerDisplayName: k.providerDisplayName || undefined,
}))),
takeUntilDestroyed(this.destroyRef)
);
}
}

28
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.html

@ -0,0 +1,28 @@
@if (mode() === eResourcePermissionViewModes.Add) {
<div class="mb-3">
<label class="form-label fw-bold">
{{ 'AbpPermissionManagement::SelectProvider' | abpLocalization }}
</label>
<div class="mb-2">
@for (provider of state.providers(); track provider.name; let i = $index) {
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" [id]="'provider-' + i" [value]="provider.name"
[checked]="state.selectedProviderName() === provider.name"
(change)="state.onProviderChange(provider.name || '')" />
<label class="form-check-label" [for]="'provider-' + i">
{{ provider.displayName }}
</label>
</div>
}
</div>
<abp-provider-key-search [resourceName]="resourceName()" />
</div>
<abp-permission-checkbox-list [permissions]="state.permissionDefinitions()" idPrefix="add" />
} @else {
<div class="mb-3" id="permissionList">
<h4>{{ 'AbpPermissionManagement::Permissions' | abpLocalization }}</h4>
<abp-permission-checkbox-list [permissions]="state.permissionsWithProvider()" idPrefix="edit" [showTitle]="false" />
</div>
}

31
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.ts

@ -0,0 +1,31 @@
import { Component, input, inject, output, ChangeDetectionStrategy } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { LocalizationPipe } from '@abp/ng.core';
import { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';
import { ProviderKeySearchComponent } from '../provider-key-search/provider-key-search.component';
import { PermissionCheckboxListComponent } from '../permission-checkbox-list/permission-checkbox-list.component';
import { eResourcePermissionViewModes } from '../../../enums/view-modes';
@Component({
selector: 'abp-resource-permission-form',
templateUrl: './resource-permission-form.component.html',
imports: [
FormsModule,
LocalizationPipe,
ProviderKeySearchComponent,
PermissionCheckboxListComponent,
],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ResourcePermissionFormComponent {
readonly state = inject(ResourcePermissionStateService);
readonly eResourcePermissionViewModes = eResourcePermissionViewModes;
readonly mode = input.required<eResourcePermissionViewModes>();
readonly resourceName = input.required<string>();
readonly save = output<void>();
readonly cancel = output<void>();
}

41
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.html

@ -0,0 +1,41 @@
<div class="d-grid gap-2 mb-3 d-md-flex justify-content-md-end">
<button class="btn btn-sm btn-primary" type="button" (click)="addClicked.emit()">
<i class="fa fa-plus me-1"></i>
{{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}
</button>
</div>
<ng-template #actionsTemplate let-row>
<div class="btn-group btn-group-sm" role="group">
<button
class="btn btn-outline-primary"
type="button"
(click)="editClicked.emit(row)"
[title]="'AbpUi::Edit' | abpLocalization"
>
<i class="fa fa-edit"></i>
</button>
<button
class="btn btn-outline-danger"
type="button"
(click)="deleteClicked.emit(row)"
[title]="'AbpUi::Delete' | abpLocalization"
>
<i class="fa fa-trash"></i>
</button>
</div>
</ng-template>
@if (state.resourcePermissions().length > 0) {
<abp-extensible-table
[data]="state.resourcePermissions()"
[recordsTotal]="state.totalCount()"
[list]="list"
[actionsTemplate]="actionsTemplate"
actionsText="AbpUi::Actions"
/>
} @else {
<div class="alert alert-info">
{{ 'AbpPermissionManagement::NoPermissionsAssigned' | abpLocalization }}
</div>
}

33
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.ts

@ -0,0 +1,33 @@
import { Component, inject, output, ChangeDetectionStrategy } from '@angular/core';
import { ListService, LocalizationPipe } from '@abp/ng.core';
import { ExtensibleTableComponent, EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';
import { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';
import { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';
import { ePermissionManagementComponents } from '../../../enums/components';
import { configureResourcePermissionExtensions } from '../../../services/extensions.service';
@Component({
selector: 'abp-resource-permission-list',
templateUrl: './resource-permission-list.component.html',
providers: [
ListService,
{
provide: EXTENSIONS_IDENTIFIER,
useValue: ePermissionManagementComponents.ResourcePermissions,
},
],
imports: [LocalizationPipe, ExtensibleTableComponent],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ResourcePermissionListComponent {
readonly state = inject(ResourcePermissionStateService);
readonly list = inject(ListService);
readonly addClicked = output<void>();
readonly editClicked = output<ResourcePermissionGrantInfoDto>();
readonly deleteClicked = output<ResourcePermissionGrantInfoDto>();
constructor() {
configureResourcePermissionExtensions();
}
}

60
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.html

@ -0,0 +1,60 @@
<abp-modal [(visible)]="visible" [busy]="state.modalBusy()" [options]="{ size: 'xl', scrollable: false }">
<ng-template #abpHeader>
<h5 class="modal-title">
@switch (state.viewMode()) {
@case (eResourcePermissionViewModes.Edit) {
{{ 'AbpPermissionManagement::UpdatePermission' | abpLocalization }}
}
@case (eResourcePermissionViewModes.Add) {
{{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}
}
@default {
{{ 'AbpPermissionManagement::ResourcePermissions' | abpLocalization }}
@if (resourceDisplayName()) {
- {{ resourceDisplayName() }}
}
}
}
</h5>
</ng-template>
<ng-template #abpBody>
@if (!state.hasResourcePermission() || !state.hasProviderKeyLookupService()) {
<div class="alert alert-warning" role="alert">
@if (!state.hasResourcePermission()) {
{{ 'AbpPermissionManagement::NoResourcePermissionFound' | abpLocalization }}
} @else {
{{ 'AbpPermissionManagement::NoResourceProviderKeyLookupServiceFound' | abpLocalization }}
}
</div>
} @else {
@switch (state.viewMode()) {
@case (eResourcePermissionViewModes.List) {
<abp-resource-permission-list (addClicked)="onAddClicked()" (editClicked)="onEditClicked($event)"
(deleteClicked)="onDeleteClicked($event)" />
}
@case (eResourcePermissionViewModes.Add) {
<abp-resource-permission-form mode="add" [resourceName]="resourceName()" />
}
@case (eResourcePermissionViewModes.Edit) {
<abp-resource-permission-form mode="edit" [resourceName]="resourceName()" />
}
}
}
</ng-template>
<ng-template #abpFooter>
@if (state.isListMode()) {
<button type="button" class="btn btn-outline-primary" abpClose>
{{ 'AbpUi::Close' | abpLocalization }}
</button>
} @else {
<button type="button" class="btn btn-outline-secondary" (click)="state.goToListMode()">
{{ 'AbpUi::Cancel' | abpLocalization }}
</button>
<abp-button iconClass="fa fa-check" (click)="savePermission()">
{{ 'AbpUi::Save' | abpLocalization }}
</abp-button>
}
</ng-template>
</abp-modal>

217
npm/ng-packs/packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.ts

@ -0,0 +1,217 @@
import { ListService, LocalizationPipe } from '@abp/ng.core';
import {
ButtonComponent,
Confirmation,
ConfirmationService,
ModalCloseDirective,
ModalComponent,
ToasterService,
} from '@abp/ng.theme.shared';
import {
PermissionsService,
ResourcePermissionGrantInfoDto,
} from '@abp/ng.permission-management/proxy';
import {
Component,
inject,
input,
model,
OnInit,
effect,
untracked,
signal,
} from '@angular/core';
import { finalize, switchMap, of } from 'rxjs';
import { ResourcePermissionStateService } from '../../services/resource-permission-state.service';
import { ResourcePermissionListComponent } from './resource-permission-list/resource-permission-list.component';
import { ResourcePermissionFormComponent } from './resource-permission-form/resource-permission-form.component';
import { eResourcePermissionViewModes } from '../../enums/view-modes';
const DEFAULT_MAX_RESULT_COUNT = 10;
@Component({
selector: 'abp-resource-permission-management',
templateUrl: './resource-permission-management.component.html',
exportAs: 'abpResourcePermissionManagement',
providers: [ResourcePermissionStateService, ListService],
imports: [
ModalComponent,
LocalizationPipe,
ButtonComponent,
ModalCloseDirective,
ResourcePermissionListComponent,
ResourcePermissionFormComponent,
],
})
export class ResourcePermissionManagementComponent implements OnInit {
readonly eResourcePermissionViewModes = eResourcePermissionViewModes;
protected readonly service = inject(PermissionsService);
protected readonly toasterService = inject(ToasterService);
protected readonly confirmationService = inject(ConfirmationService);
protected readonly state = inject(ResourcePermissionStateService);
private readonly list = inject(ListService);
readonly resourceName = input.required<string>();
readonly resourceKey = input.required<string>();
readonly resourceDisplayName = input<string>();
readonly visible = model<boolean>(false);
private readonly previousVisible = signal(false);
constructor() {
effect(() => {
const resourceName = this.resourceName();
const resourceKey = this.resourceKey();
const resourceDisplayName = this.resourceDisplayName();
untracked(() => {
this.state.resourceName.set(resourceName);
this.state.resourceKey.set(resourceKey);
this.state.resourceDisplayName.set(resourceDisplayName);
});
});
effect(() => {
const isVisible = this.visible();
const wasVisible = this.previousVisible();
if (isVisible && !wasVisible) {
this.openModal();
} else if (!isVisible && wasVisible) {
this.state.reset();
}
untracked(() => this.previousVisible.set(isVisible));
});
}
ngOnInit() {
this.list.maxResultCount = DEFAULT_MAX_RESULT_COUNT;
this.list.hookToQuery(query => {
const allData = this.state.allResourcePermissions();
const skipCount = query.skipCount || 0;
const maxResultCount = query.maxResultCount || DEFAULT_MAX_RESULT_COUNT;
const paginatedData = allData.slice(skipCount, skipCount + maxResultCount);
return of({
items: paginatedData,
totalCount: allData.length
});
}).subscribe(result => {
this.state.resourcePermissions.set(result.items);
this.state.totalCount.set(result.totalCount);
});
}
openModal() {
this.state.modalBusy.set(true);
this.service.getResource(this.resourceName(), this.resourceKey()).pipe(
switchMap(permRes => {
this.state.setResourceData(permRes.permissions || []);
this.list.get();
return this.service.getResourceProviderKeyLookupServices(this.resourceName());
}),
switchMap(providerRes => {
this.state.setProviders(providerRes.providers || []);
return this.service.getResourceDefinitions(this.resourceName());
}),
finalize(() => this.state.modalBusy.set(false))
).subscribe({
next: defRes => {
this.state.setDefinitions(defRes.permissions || []);
},
error: () => {
this.toasterService.error('AbpPermissionManagement::ErrorLoadingPermissions');
}
});
}
onAddClicked() {
this.state.goToAddMode();
}
onEditClicked(grant: ResourcePermissionGrantInfoDto) {
this.state.prepareEditMode(grant);
this.state.modalBusy.set(true);
this.service.getResourceByProvider(
this.resourceName(),
this.resourceKey(),
grant.providerName || '',
grant.providerKey || ''
).pipe(
finalize(() => this.state.modalBusy.set(false))
).subscribe({
next: res => {
this.state.setEditModePermissions(res.permissions || []);
}
});
}
onDeleteClicked(grant: ResourcePermissionGrantInfoDto) {
this.confirmationService
.warn(
'AbpPermissionManagement::PermissionDeletionConfirmationMessage',
'AbpPermissionManagement::AreYouSure',
{
messageLocalizationParams: [grant.providerKey || ''],
}
)
.subscribe((status: Confirmation.Status) => {
if (status === Confirmation.Status.confirm) {
this.state.modalBusy.set(true);
this.service.deleteResource(
this.resourceName(),
this.resourceKey(),
grant.providerName || '',
grant.providerKey || ''
).pipe(
switchMap(() => this.service.getResource(this.resourceName(), this.resourceKey())),
finalize(() => this.state.modalBusy.set(false))
).subscribe({
next: res => {
this.state.setResourceData(res.permissions || []);
this.list.get();
this.toasterService.success('AbpUi::SuccessfullyDeleted');
}
});
}
});
}
savePermission() {
const isEdit = this.state.isEditMode();
const providerName = isEdit ? this.state.editProviderName() : this.state.selectedProviderName();
const providerKey = isEdit ? this.state.editProviderKey() : this.state.selectedProviderKey();
if (!isEdit && !this.state.canSave()) {
this.toasterService.warn('AbpPermissionManagement::PleaseSelectProviderAndPermissions');
return;
}
this.state.modalBusy.set(true);
this.service.updateResource(
this.resourceName(),
this.resourceKey(),
{
providerName,
providerKey,
permissions: this.state.selectedPermissions()
}
).pipe(
switchMap(() => this.service.getResource(this.resourceName(), this.resourceKey())),
finalize(() => this.state.modalBusy.set(false))
).subscribe({
next: res => {
this.state.setResourceData(res.permissions || []);
this.list.get();
this.toasterService.success('AbpUi::SavedSuccessfully');
this.state.goToListMode();
}
});
}
}

34
npm/ng-packs/packages/permission-management/src/lib/defaults/default-resource-permission-entity-props.ts

@ -0,0 +1,34 @@
import { EntityProp, ePropType } from '@abp/ng.components/extensible';
import { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';
import { of } from 'rxjs';
export const DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS = EntityProp.createMany<ResourcePermissionGrantInfoDto>([
{
type: ePropType.String,
name: 'providerWithKey',
displayName: 'AbpPermissionManagement::Provider',
sortable: false,
valueResolver: data => {
const providerName = data.record.providerName || '';
const providerDisplayName = data.record.providerDisplayName || data.record.providerKey || '';
// Get first letter of provider name for abbreviation
const abbr = providerName.charAt(0).toUpperCase();
return of(
`<span class="d-inline-block bg-light rounded-pill px-2 me-1 ms-1 mb-1" title="${data.record.providerNameDisplayName || providerName}">${abbr}</span>${providerDisplayName}`
);
},
},
{
type: ePropType.String,
name: 'permissions',
displayName: 'AbpPermissionManagement::Permissions',
sortable: false,
valueResolver: data => {
const permissions = data.record.permissions || [];
const pills = permissions
.map(p => `<span class="d-inline-block bg-light rounded-pill px-2 me-1 mb-1">${p.displayName}</span>`)
.join('');
return of(pills);
},
},
]);

1
npm/ng-packs/packages/permission-management/src/lib/defaults/index.ts

@ -0,0 +1 @@
export * from './default-resource-permission-entity-props';

1
npm/ng-packs/packages/permission-management/src/lib/enums/components.ts

@ -1,3 +1,4 @@
export const enum ePermissionManagementComponents {
PermissionManagement = 'PermissionManagement.PermissionManagementComponent',
ResourcePermissions = 'PermissionManagement.ResourcePermissionsComponent',
}

2
npm/ng-packs/packages/permission-management/src/lib/enums/index.ts

@ -0,0 +1,2 @@
export * from './view-modes';
export * from './components';

5
npm/ng-packs/packages/permission-management/src/lib/enums/view-modes.ts

@ -0,0 +1,5 @@
export enum eResourcePermissionViewModes {
List = 'list',
Add = 'add',
Edit = 'edit',
}

23
npm/ng-packs/packages/permission-management/src/lib/services/extensions.service.ts

@ -0,0 +1,23 @@
import {
ExtensionsService,
mergeWithDefaultProps,
} from '@abp/ng.components/extensible';
import { inject } from '@angular/core';
import {
RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS,
DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP,
} from '../tokens';
export function configureResourcePermissionExtensions() {
const extensions = inject(ExtensionsService);
const config = { optional: true };
const propContributors = inject(RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS, config) || {};
mergeWithDefaultProps(
extensions.entityProps,
DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP,
propContributors,
);
}

2
npm/ng-packs/packages/permission-management/src/lib/services/index.ts

@ -0,0 +1,2 @@
export * from './extensions.service';
export * from './resource-permission-state.service';

164
npm/ng-packs/packages/permission-management/src/lib/services/resource-permission-state.service.ts

@ -0,0 +1,164 @@
import { Injectable, signal, computed } from '@angular/core';
import {
ResourcePermissionGrantInfoDto,
ResourceProviderDto,
ResourcePermissionDefinitionDto,
SearchProviderKeyInfo,
ResourcePermissionWithProdiverGrantInfoDto,
} from '@abp/ng.permission-management/proxy';
import { eResourcePermissionViewModes } from '../enums/view-modes';
@Injectable()
export class ResourcePermissionStateService {
// View state
readonly viewMode = signal<eResourcePermissionViewModes>(eResourcePermissionViewModes.List);
readonly modalBusy = signal(false);
readonly hasResourcePermission = signal(false);
readonly hasProviderKeyLookupService = signal(false);
// Resource data
readonly resourceName = signal('');
readonly resourceKey = signal('');
readonly resourceDisplayName = signal<string | undefined>(undefined);
// Permissions data
readonly allResourcePermissions = signal<ResourcePermissionGrantInfoDto[]>([]);
readonly resourcePermissions = signal<ResourcePermissionGrantInfoDto[]>([]);
readonly totalCount = signal(0);
readonly permissionDefinitions = signal<ResourcePermissionDefinitionDto[]>([]);
readonly permissionsWithProvider = signal<ResourcePermissionWithProdiverGrantInfoDto[]>([]);
readonly selectedPermissions = signal<string[]>([]);
// Provider data
readonly providers = signal<ResourceProviderDto[]>([]);
readonly selectedProviderName = signal('');
readonly selectedProviderKey = signal('');
// Edit mode specific
readonly editProviderName = signal('');
readonly editProviderKey = signal('');
// Search state
readonly searchFilter = signal('');
readonly searchResults = signal<SearchProviderKeyInfo[]>([]);
readonly showDropdown = signal(false);
// Computed properties
readonly isAddMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Add);
readonly isEditMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Edit);
readonly isListMode = computed(() => this.viewMode() === eResourcePermissionViewModes.List);
readonly currentPermissionsList = computed(() =>
this.isAddMode() ? this.permissionDefinitions() : this.permissionsWithProvider()
);
readonly allPermissionsSelected = computed(() => {
const definitions = this.currentPermissionsList();
return definitions.length > 0 &&
definitions.every(p => this.selectedPermissions().includes(p.name || ''));
});
readonly canSave = computed(() => {
if (this.isAddMode()) {
return !!this.selectedProviderKey() && this.selectedPermissions().length > 0;
}
return this.selectedPermissions().length >= 0;
});
// State transition methods
goToListMode() {
this.viewMode.set(eResourcePermissionViewModes.List);
this.selectedPermissions.set([]);
}
goToAddMode() {
this.viewMode.set(eResourcePermissionViewModes.Add);
this.selectedPermissions.set([]);
this.selectedProviderKey.set('');
this.searchResults.set([]);
this.searchFilter.set('');
}
prepareEditMode(grant: ResourcePermissionGrantInfoDto) {
this.editProviderName.set(grant.providerName || '');
this.editProviderKey.set(grant.providerKey || '');
}
setEditModePermissions(permissions: ResourcePermissionWithProdiverGrantInfoDto[]) {
this.permissionsWithProvider.set(permissions);
this.selectedPermissions.set(
permissions.filter(p => p.isGranted).map(p => p.name || '')
);
this.viewMode.set(eResourcePermissionViewModes.Edit);
}
// Permission selection methods
togglePermission(permissionName: string) {
const current = this.selectedPermissions();
if (current.includes(permissionName)) {
this.selectedPermissions.set(current.filter(p => p !== permissionName));
} else {
this.selectedPermissions.set([...current, permissionName]);
}
}
toggleAllPermissions(selectAll: boolean) {
const permissions = this.currentPermissionsList();
this.selectedPermissions.set(
selectAll ? permissions.map(p => p.name || '') : []
);
}
isPermissionSelected(permissionName: string): boolean {
return this.selectedPermissions().includes(permissionName);
}
// Provider search methods
onProviderChange(providerName: string) {
this.selectedProviderName.set(providerName);
this.selectedProviderKey.set('');
this.searchResults.set([]);
this.searchFilter.set('');
}
selectProviderKey(key: SearchProviderKeyInfo) {
this.selectedProviderKey.set(key.providerKey || '');
this.searchFilter.set(key.providerDisplayName || key.providerKey || '');
this.searchResults.set([]);
this.showDropdown.set(false);
}
// Reset all state
reset() {
this.viewMode.set(eResourcePermissionViewModes.List);
this.allResourcePermissions.set([]);
this.resourcePermissions.set([]);
this.totalCount.set(0);
this.selectedProviderName.set('');
this.selectedProviderKey.set('');
this.searchFilter.set('');
this.selectedPermissions.set([]);
this.searchResults.set([]);
this.editProviderName.set('');
this.editProviderKey.set('');
}
// Data loading helpers
setResourceData(permissions: ResourcePermissionGrantInfoDto[]) {
this.allResourcePermissions.set(permissions);
this.totalCount.set(permissions.length);
}
setProviders(providers: ResourceProviderDto[]) {
this.providers.set(providers);
this.hasProviderKeyLookupService.set(providers.length > 0);
if (providers.length) {
this.selectedProviderName.set(providers[0].name || '');
}
}
setDefinitions(permissions: ResourcePermissionDefinitionDto[]) {
this.permissionDefinitions.set(permissions);
this.hasResourcePermission.set(permissions.length > 0);
}
}

17
npm/ng-packs/packages/permission-management/src/lib/tokens/extensions.token.ts

@ -0,0 +1,17 @@
import { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';
import { EntityPropContributorCallback } from '@abp/ng.components/extensible';
import { InjectionToken } from '@angular/core';
import { DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS } from '../defaults/default-resource-permission-entity-props';
import { ePermissionManagementComponents } from '../enums/components';
export const DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP = {
[ePermissionManagementComponents.ResourcePermissions]: DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS,
};
export const RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS = new InjectionToken<EntityPropContributors>(
'RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS',
);
type EntityPropContributors = Partial<{
[ePermissionManagementComponents.ResourcePermissions]: EntityPropContributorCallback<ResourcePermissionGrantInfoDto>[];
}>;

1
npm/ng-packs/packages/permission-management/src/lib/tokens/index.ts

@ -0,0 +1 @@
export * from './extensions.token';

1
npm/ng-packs/tsconfig.base.json

@ -22,6 +22,7 @@
"@abp/ng.components": ["packages/components/src/public-api.ts"],
"@abp/ng.components/chart.js": ["packages/components/chart.js/src/public-api.ts"],
"@abp/ng.components/extensible": ["packages/components/extensible/src/public-api.ts"],
"@abp/ng.components/lookup": ["packages/components/lookup/src/public-api.ts"],
"@abp/ng.components/page": ["packages/components/page/src/public-api.ts"],
"@abp/ng.components/tree": ["packages/components/tree/src/public-api.ts"],
"@abp/ng.core": ["packages/core/src/public-api.ts"],

Loading…
Cancel
Save