@kalisio/kdk 1.3.6 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nyc_output/{0d403586-0c7c-4336-94d1-a49e9f02a905.json → 058fc679-d60a-4501-ac04-71171e5200b8.json} +0 -0
- package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
- package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
- package/.nyc_output/{21dd57bd-48c5-41c8-8800-252db32a9366.json → 8b1830fa-932e-4a61-9837-4a5b18f83ea9.json} +0 -0
- package/.nyc_output/{3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json → afd2d144-3570-4858-b94a-b523dbd023dd.json} +0 -0
- package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +1 -0
- package/.nyc_output/processinfo/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
- package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
- package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +1 -0
- package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGELOG.md +167 -79
- package/README.md +1 -1
- package/coverage/core/api/application.js.html +436 -436
- package/coverage/core/api/authentication.js.html +119 -119
- package/coverage/core/api/db.js.html +201 -201
- package/coverage/core/api/hooks/hooks.account.js.html +48 -48
- package/coverage/core/api/hooks/hooks.authentication.js.html +64 -64
- package/coverage/core/api/hooks/hooks.authorisations.js.html +369 -378
- package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/core/api/hooks/hooks.organisations.js.html +183 -231
- package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/core/api/hooks/hooks.query.js.html +234 -198
- package/coverage/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/core/api/hooks/hooks.users.js.html +304 -256
- package/coverage/core/api/hooks/index.html +172 -172
- package/coverage/core/api/hooks/index.js.html +24 -24
- package/coverage/core/api/index.html +75 -75
- package/coverage/core/api/index.js.html +26 -26
- package/coverage/core/api/marshall.js.html +57 -57
- package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/core/api/models/index.html +50 -50
- package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/core/api/oauth2-handler.js.html +18 -18
- package/coverage/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/core/api/services/account/account.service.js.html +108 -108
- package/coverage/core/api/services/account/index.html +32 -32
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +132 -129
- package/coverage/core/api/services/authorisations/index.html +28 -28
- package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/core/api/services/databases/index.html +24 -24
- package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/core/api/services/devices/index.html +28 -28
- package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/core/api/services/groups/index.html +13 -13
- package/coverage/core/api/services/index.html +21 -21
- package/coverage/core/api/services/index.js.html +137 -137
- package/coverage/core/api/services/mailer/index.html +24 -24
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/core/api/services/organisations/index.html +24 -24
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/core/api/services/pusher/index.html +34 -34
- package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/core/api/services/storage/index.html +21 -21
- package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/core/api/services/tags/index.html +21 -21
- package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/core/api/services/users/index.html +21 -21
- package/coverage/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/core/common/errors.js.html +1 -1
- package/coverage/core/common/index.html +42 -27
- package/coverage/core/common/index.js.html +16 -16
- package/coverage/core/common/permissions.js.html +325 -265
- package/coverage/index.html +182 -182
- package/coverage/lcov-report/core/api/application.js.html +436 -436
- package/coverage/lcov-report/core/api/authentication.js.html +119 -119
- package/coverage/lcov-report/core/api/db.js.html +201 -201
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +48 -48
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +64 -64
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +369 -378
- package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +183 -231
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +234 -198
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +304 -256
- package/coverage/lcov-report/core/api/hooks/index.html +172 -172
- package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
- package/coverage/lcov-report/core/api/index.html +75 -75
- package/coverage/lcov-report/core/api/index.js.html +26 -26
- package/coverage/lcov-report/core/api/marshall.js.html +57 -57
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/models/index.html +50 -50
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +108 -108
- package/coverage/lcov-report/core/api/services/account/index.html +32 -32
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +132 -129
- package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
- package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
- package/coverage/lcov-report/core/api/services/index.html +21 -21
- package/coverage/lcov-report/core/api/services/index.js.html +137 -137
- package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
- package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/lcov-report/core/api/services/users/index.html +21 -21
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/lcov-report/core/common/errors.js.html +1 -1
- package/coverage/lcov-report/core/common/index.html +42 -27
- package/coverage/lcov-report/core/common/index.js.html +16 -16
- package/coverage/lcov-report/core/common/permissions.js.html +325 -265
- package/coverage/lcov-report/index.html +182 -182
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +118 -37
- package/coverage/lcov-report/map/api/hooks/index.html +7 -7
- package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
- package/coverage/lcov-report/map/api/index.html +1 -1
- package/coverage/lcov-report/map/api/index.js.html +1 -1
- package/coverage/lcov-report/map/api/marshall.js.html +1 -1
- package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/index.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
- package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +2 -2
- package/coverage/lcov-report/map/api/services/features/index.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.js.html +1 -1
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/errors.js.html +1 -1
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/grid.js.html +1 -1
- package/coverage/lcov-report/map/common/index.html +12 -12
- package/coverage/lcov-report/map/common/index.js.html +1 -1
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/permissions.js.html +1 -1
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/wfs-utils.js.html +8 -5
- package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wmts-utils.js.html +71 -11
- package/coverage/lcov.info +3742 -3949
- package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/map/api/hooks/hooks.query.js.html +118 -37
- package/coverage/map/api/hooks/index.html +7 -7
- package/coverage/map/api/hooks/index.js.html +1 -1
- package/coverage/map/api/index.html +1 -1
- package/coverage/map/api/index.js.html +1 -1
- package/coverage/map/api/marshall.js.html +1 -1
- package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/index.html +1 -1
- package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/map/api/services/alerts/index.html +1 -1
- package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/map/api/services/catalog/index.html +1 -1
- package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/map/api/services/daptiles/index.html +1 -1
- package/coverage/map/api/services/features/features.hooks.js.html +2 -2
- package/coverage/map/api/services/features/index.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/map/api/services/geocoder/index.html +1 -1
- package/coverage/map/api/services/index.html +1 -1
- package/coverage/map/api/services/index.js.html +1 -1
- package/coverage/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/map/common/errors.js.html +1 -1
- package/coverage/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/map/common/grid.js.html +1 -1
- package/coverage/map/common/index.html +12 -12
- package/coverage/map/common/index.js.html +1 -1
- package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/map/common/moment-utils.js.html +1 -1
- package/coverage/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/map/common/opendap-utils.js.html +1 -1
- package/coverage/map/common/permissions.js.html +1 -1
- package/coverage/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/map/common/tms-utils.js.html +1 -1
- package/coverage/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/map/common/wcs-utils.js.html +1 -1
- package/coverage/map/common/weacast-grid-source.js.html +1 -1
- package/coverage/map/common/wfs-utils.js.html +8 -5
- package/coverage/map/common/wms-utils.js.html +1 -1
- package/coverage/map/common/wmts-utils.js.html +71 -11
- package/extras/icons/kanban.png +0 -0
- package/extras/tours/core/add-member.js +10 -1
- package/extras/tours/core/{tag-member.js → edit-member-tags.js} +4 -3
- package/extras/tours/core/groups.js +8 -2
- package/extras/tours/core/members.js +11 -21
- package/extras/tours/core/tags.js +7 -1
- package/extras/tours/map/catalog-categories.js +4 -4
- package/extras/tours/map/catalog-panel.js +16 -16
- package/extras/tours/map/favorite-views.js +3 -3
- package/lib/core/api/hooks/hooks.authorisations.js +149 -140
- package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
- package/lib/core/api/hooks/hooks.organisations.js +1 -23
- package/lib/core/api/hooks/hooks.organisations.js.map +1 -1
- package/lib/core/api/hooks/hooks.query.js +22 -0
- package/lib/core/api/hooks/hooks.query.js.map +1 -1
- package/lib/core/api/hooks/hooks.users.js +34 -18
- package/lib/core/api/hooks/hooks.users.js.map +1 -1
- package/lib/core/api/services/authorisations/authorisations.service.js +34 -25
- package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
- package/lib/core/client/api.js +1 -0
- package/lib/core/client/api.js.map +1 -1
- package/lib/core/client/components/account/KAccountDZ.vue +3 -4
- package/lib/core/client/components/account/KAccountDevices.vue +5 -6
- package/lib/core/client/components/account/KDeviceCard.vue +2 -1
- package/lib/core/client/components/account/KIdentityPanel.vue +1 -7
- package/lib/core/client/components/collection/KBoard.vue +26 -155
- package/lib/core/client/components/collection/KCard.vue +144 -42
- package/lib/core/client/components/collection/KCardSection.vue +52 -0
- package/lib/core/client/components/collection/KColumn.vue +181 -0
- package/lib/core/client/components/collection/KGrid.vue +13 -18
- package/lib/core/client/components/collection/KHistory.vue +61 -89
- package/lib/core/client/components/collection/KHistoryEntry.vue +90 -66
- package/lib/core/client/components/collection/KItem.vue +21 -2
- package/lib/core/client/components/collection/KList.vue +9 -12
- package/lib/core/client/components/collection/KTable.vue +33 -39
- package/lib/core/client/components/collection/index.js +6 -1
- package/lib/core/client/components/collection/index.js.map +1 -1
- package/lib/core/client/components/editor/KEditor.vue +0 -6
- package/lib/core/client/components/editor/KModalEditor.vue +4 -4
- package/lib/core/client/components/editor/KSettingsEditor.vue +49 -0
- package/lib/core/client/components/form/KAttachmentField.vue +10 -10
- package/lib/core/client/components/form/KChipsField.vue +28 -23
- package/lib/core/client/components/form/KColorField.vue +30 -25
- package/lib/core/client/components/form/KFileField.vue +11 -40
- package/lib/core/client/components/form/KForm.vue +0 -12
- package/lib/core/client/components/form/KIconField.vue +1 -0
- package/lib/core/client/components/form/KItemField.vue +6 -2
- package/lib/core/client/components/form/KRoleField.vue +56 -0
- package/lib/core/client/components/form/KSelectField.vue +16 -1
- package/lib/core/client/components/form/KView.vue +5 -14
- package/lib/core/client/components/frame/KAction.vue +18 -12
- package/lib/core/client/components/frame/KAvatar.vue +3 -3
- package/lib/core/client/components/frame/KChart.vue +60 -0
- package/lib/core/client/components/frame/KChipsPane.vue +80 -0
- package/lib/core/client/components/frame/KContent.vue +1 -1
- package/lib/core/client/components/frame/KModal.vue +30 -44
- package/lib/core/client/components/frame/KPanel.vue +1 -1
- package/lib/core/client/components/frame/{KMenu.vue → KPopupAction.vue} +6 -7
- package/lib/core/client/components/frame/KSpot.vue +31 -0
- package/lib/core/client/components/frame/KStamp.vue +62 -0
- package/lib/core/client/components/frame/index.js +56 -1
- package/lib/core/client/components/frame/index.js.map +1 -1
- package/lib/core/client/components/input/KColorChooser.vue +16 -8
- package/lib/core/client/components/input/KIconChooser.vue +2 -1
- package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
- package/lib/core/client/components/input/KUploader.vue +14 -5
- package/lib/core/client/components/layout/KAbout.vue +9 -3
- package/lib/core/client/components/layout/KFab.vue +1 -1
- package/lib/core/client/components/layout/KPage.vue +44 -19
- package/lib/core/client/components/layout/KTour.vue +2 -2
- package/lib/core/client/components/layout/KWelcome.vue +13 -12
- package/lib/core/client/components/layout/KWindow.vue +1 -1
- package/lib/core/client/components/media/KImageViewer.vue +9 -7
- package/lib/core/client/components/media/KMediaBrowser.vue +12 -8
- package/lib/core/client/components/menu/KMenu.vue +103 -0
- package/lib/core/client/components/team/KAddMember.vue +17 -9
- package/lib/core/client/components/team/KChangeRole.vue +5 -7
- package/lib/core/client/components/team/KGroupCard.vue +34 -51
- package/lib/core/client/components/team/KGroupsActivity.vue +9 -2
- package/lib/core/client/components/team/KJoinGroup.vue +5 -7
- package/lib/core/client/components/team/KMemberCard.vue +104 -63
- package/lib/core/client/components/team/KMembersActivity.vue +9 -2
- package/lib/core/client/components/team/KOrganisationsActivity.vue +8 -1
- package/lib/core/client/components/team/KTagCard.vue +26 -26
- package/lib/core/client/components/team/KTagsActivity.vue +9 -2
- package/lib/core/client/components/time/KTimeRange.vue +144 -0
- package/lib/core/client/components/viewer/KModalViewer.vue +6 -0
- package/lib/core/client/components/viewer/KViewer.vue +0 -6
- package/lib/core/client/i18n/core_en.json +138 -94
- package/lib/core/client/i18n/core_fr.json +61 -17
- package/lib/core/client/index.js +46 -14
- package/lib/core/client/index.js.map +1 -1
- package/lib/core/client/layout.js +8 -1
- package/lib/core/client/layout.js.map +1 -1
- package/lib/core/client/mixins/mixin.authorisation.js +28 -18
- package/lib/core/client/mixins/mixin.authorisation.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-collection.js +57 -9
- package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-context.js +1 -1
- package/lib/core/client/mixins/mixin.base-context.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-editor.js +26 -16
- package/lib/core/client/mixins/mixin.base-editor.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-field.js +0 -4
- package/lib/core/client/mixins/mixin.base-field.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-item.js +29 -14
- package/lib/core/client/mixins/mixin.base-item.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-viewer.js +0 -2
- package/lib/core/client/mixins/mixin.base-viewer.js.map +1 -1
- package/lib/core/client/mixins/mixin.object-proxy.js +17 -3
- package/lib/core/client/mixins/mixin.object-proxy.js.map +1 -1
- package/lib/core/client/mixins/mixin.schema-proxy.js +31 -0
- package/lib/core/client/mixins/mixin.schema-proxy.js.map +1 -1
- package/lib/core/client/mixins/mixin.service.js +5 -33
- package/lib/core/client/mixins/mixin.service.js.map +1 -1
- package/lib/core/client/reader.js +54 -0
- package/lib/core/client/reader.js.map +1 -0
- package/lib/core/client/readers/index.js +30 -0
- package/lib/core/client/readers/index.js.map +1 -0
- package/lib/core/client/readers/reader.csv.js +43 -0
- package/lib/core/client/readers/reader.csv.js.map +1 -0
- package/lib/core/client/readers/reader.json.js +38 -0
- package/lib/core/client/readers/reader.json.js.map +1 -0
- package/lib/core/client/services/index.js +23 -0
- package/lib/core/client/services/index.js.map +1 -1
- package/lib/core/client/services/local-settings.service.js +4 -0
- package/lib/core/client/services/local-settings.service.js.map +1 -1
- package/lib/core/client/time.js +131 -0
- package/lib/core/client/time.js.map +1 -0
- package/lib/core/common/permissions.js +65 -23
- package/lib/core/common/permissions.js.map +1 -1
- package/lib/core/common/schemas/groups.create.json +1 -1
- package/lib/core/common/schemas/groups.update.json +1 -1
- package/lib/core/common/schemas/organisations.create.json +1 -1
- package/lib/core/common/schemas/organisations.update.json +2 -2
- package/lib/core/common/schemas/settings.update.json +139 -0
- package/lib/core/common/schemas/tags.update.json +9 -1
- package/lib/map/api/hooks/hooks.query.js +55 -29
- package/lib/map/api/hooks/hooks.query.js.map +1 -1
- package/lib/map/api/services/features/features.hooks.js +1 -1
- package/lib/map/api/services/features/features.hooks.js.map +1 -1
- package/lib/map/client/components/KCaptureToolbar.vue +156 -0
- package/lib/map/client/components/KColorLegend.vue +25 -23
- package/lib/map/client/components/KFavoriteViews.vue +71 -35
- package/lib/map/client/components/KFeaturesChart.vue +11 -9
- package/lib/map/client/components/KFeaturesFilter.vue +18 -8
- package/lib/map/client/components/KFeaturesTable.vue +27 -2
- package/lib/map/client/components/KLayerEditionToolbar.vue +51 -0
- package/lib/map/client/components/KLayerStyleEditor.vue +12 -5
- package/lib/map/client/components/KLayerStyleForm.vue +44 -33
- package/lib/map/client/components/KLocationInput.vue +126 -65
- package/lib/map/client/components/KLocationMap.vue +199 -84
- package/lib/map/client/components/KMeasureTool.vue +340 -0
- package/lib/map/client/components/KPositionIndicator.vue +1 -0
- package/lib/map/client/components/KTimeline.vue +41 -37
- package/lib/map/client/components/KUrlLegend.vue +21 -19
- package/lib/map/client/components/catalog/KBaseLayersSelector.vue +105 -0
- package/lib/map/client/components/catalog/KCatalog.vue +14 -2
- package/lib/map/client/components/catalog/KConnectLayer.vue +31 -11
- package/lib/map/client/components/catalog/KCreateLayer.vue +37 -14
- package/lib/map/client/components/catalog/KImportLayer.vue +33 -40
- package/lib/map/client/components/catalog/KLayerCategories.vue +86 -62
- package/lib/map/client/components/catalog/KLayersSelector.vue +44 -42
- package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
- package/lib/map/client/components/form/KLocationField.vue +1 -1
- package/lib/map/client/components/form/KOwsLayerField.vue +7 -0
- package/lib/map/client/components/form/KOwsServiceField.vue +1 -0
- package/lib/map/client/components/widget/KInformationBox.vue +10 -16
- package/lib/map/client/components/widget/KMapillaryViewer.vue +59 -49
- package/lib/map/client/components/widget/KTimeSeries.vue +119 -31
- package/lib/map/client/i18n/map_en.json +105 -20
- package/lib/map/client/i18n/map_fr.json +107 -23
- package/lib/map/client/init.js +24 -7
- package/lib/map/client/init.js.map +1 -1
- package/lib/map/client/leaflet/GSMaPLayer.js +4 -9
- package/lib/map/client/leaflet/GSMaPLayer.js.map +1 -1
- package/lib/map/client/leaflet/MaskLayer.js +73 -0
- package/lib/map/client/leaflet/MaskLayer.js.map +1 -0
- package/lib/map/client/mixins/globe/mixin.base-globe.js +7 -6
- package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js +7 -9
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.popup.js +4 -0
- package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.tooltip.js +4 -0
- package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/index.js +8 -13
- package/lib/map/client/mixins/index.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.base-map.js +71 -8
- package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.canvas-layers.js +276 -51
- package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.edit-layers.js +218 -121
- package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.file-layers.js +46 -93
- package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.geojson-layers.js +22 -11
- package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.georaster-layers.js +7 -4
- package/lib/map/client/mixins/map/mixin.georaster-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.gsmap-layers.js +3 -3
- package/lib/map/client/mixins/map/mixin.gsmap-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.heatmap-layers.js +8 -10
- package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.mapillary-layers.js +25 -40
- package/lib/map/client/mixins/map/mixin.mapillary-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.popup.js +4 -0
- package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +5 -3
- package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +5 -3
- package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tooltip.js +4 -0
- package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/mixin.activity.js +62 -68
- package/lib/map/client/mixins/mixin.activity.js.map +1 -1
- package/lib/map/client/mixins/mixin.context.js +26 -3
- package/lib/map/client/mixins/mixin.context.js.map +1 -1
- package/lib/map/client/mixins/mixin.feature-selection.js +8 -10
- package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
- package/lib/map/client/mixins/mixin.feature-service.js +9 -7
- package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
- package/lib/map/client/mixins/mixin.infobox.js +4 -0
- package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
- package/lib/map/client/mixins/mixin.weacast.js +6 -4
- package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
- package/lib/map/client/pixi-utils.js +9 -0
- package/lib/map/client/pixi-utils.js.map +1 -1
- package/lib/map/client/readers/index.js +42 -0
- package/lib/map/client/readers/index.js.map +1 -0
- package/lib/map/client/readers/reader.geojson.js +59 -0
- package/lib/map/client/readers/reader.geojson.js.map +1 -0
- package/lib/map/client/readers/reader.gpx.js +41 -0
- package/lib/map/client/readers/reader.gpx.js.map +1 -0
- package/lib/map/client/readers/reader.kml.js +41 -0
- package/lib/map/client/readers/reader.kml.js.map +1 -0
- package/lib/map/client/utils.js +52 -1
- package/lib/map/client/utils.js.map +1 -1
- package/lib/map/common/wfs-utils.js +1 -1
- package/lib/map/common/wfs-utils.js.map +1 -1
- package/lib/map/common/wmts-utils.js +31 -7
- package/lib/map/common/wmts-utils.js.map +1 -1
- package/lib/test/client/core/account.js +100 -0
- package/lib/test/client/core/account.js.map +1 -0
- package/lib/test/client/core/api.js +400 -0
- package/lib/test/client/core/api.js.map +1 -0
- package/lib/test/client/core/collection.js +109 -0
- package/lib/test/client/core/collection.js.map +1 -0
- package/lib/test/client/core/index.js +90 -0
- package/lib/test/client/core/index.js.map +1 -0
- package/lib/test/client/core/layout.js +221 -0
- package/lib/test/client/core/layout.js.map +1 -0
- package/lib/test/client/core/runner.js +203 -0
- package/lib/test/client/core/runner.js.map +1 -0
- package/lib/test/client/core/screens.js +68 -0
- package/lib/test/client/core/screens.js.map +1 -0
- package/lib/test/client/core/utils.js +304 -0
- package/lib/test/client/core/utils.js.map +1 -0
- package/lib/test/client/index.js +20 -0
- package/lib/test/client/index.js.map +1 -0
- package/lib/test/client/map/catalog.js +192 -0
- package/lib/test/client/map/catalog.js.map +1 -0
- package/lib/test/client/map/controls.js +54 -0
- package/lib/test/client/map/controls.js.map +1 -0
- package/lib/test/client/map/index.js +30 -0
- package/lib/test/client/map/index.js.map +1 -0
- package/package.json +18 -9
- package/test.client.js +1 -0
- package/tests/core/test-log-2021-09-02.log +47 -0
- package/tests/map/test-log-%DATE%.logYYYY-09-DD +6 -0
- package/tests/map/test-log-2021-09-02.log +3 -0
- package/.nyc_output/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
- package/.nyc_output/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
- package/.nyc_output/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
- package/.nyc_output/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
- package/.nyc_output/processinfo/0d403586-0c7c-4336-94d1-a49e9f02a905.json +0 -1
- package/.nyc_output/processinfo/21dd57bd-48c5-41c8-8800-252db32a9366.json +0 -1
- package/.nyc_output/processinfo/3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json +0 -1
- package/.nyc_output/processinfo/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
- package/.nyc_output/processinfo/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
- package/.nyc_output/processinfo/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
- package/.nyc_output/processinfo/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
- package/extras/testcafe/Dockerfile +0 -48
- package/extras/testcafe/docker-entrypoint.sh +0 -27
- package/extras/testcafe/page-models/core/account.js +0 -75
- package/extras/testcafe/page-models/core/base-collection.js +0 -41
- package/extras/testcafe/page-models/core/base-page.js +0 -25
- package/extras/testcafe/page-models/core/groups.js +0 -36
- package/extras/testcafe/page-models/core/index.js +0 -140
- package/extras/testcafe/page-models/core/layout.js +0 -145
- package/extras/testcafe/page-models/core/members.js +0 -98
- package/extras/testcafe/page-models/core/organisations.js +0 -76
- package/extras/testcafe/page-models/core/screens.js +0 -99
- package/extras/testcafe/page-models/core/tags.js +0 -21
- package/extras/testcafe/page-models/map/add-layer.js +0 -51
- package/extras/testcafe/page-models/map/catalog.js +0 -132
- package/extras/testcafe/page-models/map/index.js +0 -36
- package/extras/testcafe/page-models/map/map-activity.js +0 -42
- package/extras/testcafe/page-models/map/timeline.js +0 -67
- package/lib/core/client/components/frame/KLabel.vue +0 -56
- package/lib/core/client/components/team/KTagsPane.vue +0 -35
- package/lib/map/client/leaflet/TiledMapillaryLayer.js +0 -137
- package/lib/map/client/leaflet/TiledMapillaryLayer.js.map +0 -1
- package/lib/map/client/mixins/mixin.time.js +0 -73
- package/lib/map/client/mixins/mixin.time.js.map +0 -1
- package/tests/core/account.test.js +0 -423
- package/tests/core/client.test.js.skip +0 -37
- package/tests/core/config/default.js +0 -96
- package/tests/core/config/email-templates/confirmInvitation/html.ejs +0 -18
- package/tests/core/config/email-templates/identityChange/html.ejs +0 -12
- package/tests/core/config/email-templates/newDevice/html.ejs +0 -7
- package/tests/core/config/email-templates/passwordChange/html.ejs +0 -5
- package/tests/core/config/email-templates/resendVerifySignup/html.ejs +0 -10
- package/tests/core/config/email-templates/resetPwd/html.ejs +0 -5
- package/tests/core/config/email-templates/sendResetPwd/html.ejs +0 -8
- package/tests/core/config/email-templates/verifySignup/html.ejs +0 -3
- package/tests/core/data/10k_most_common_passwords.txt +0 -10000
- package/tests/core/data/logo.png +0 -0
- package/tests/core/hooks.test.js +0 -175
- package/tests/core/index.test.js +0 -432
- package/tests/core/notifications.test.js +0 -465
- package/tests/core/storage.test.js +0 -134
- package/tests/core/team.test.js +0 -610
- package/tests/core/utils.js +0 -62
- package/tests/map/alerts.test.js +0 -554
- package/tests/map/config/default.js +0 -112
- package/tests/map/config/layers.json +0 -37
- package/tests/map/daptiles.test.js +0 -41
- package/tests/map/data/DescribeCoverage.xml +0 -55
- package/tests/map/data/GetCoverage.tif +0 -0
- package/tests/map/data/adsb.observations.json +0 -132
- package/tests/map/data/dataset.grb.das +0 -55
- package/tests/map/data/dataset.grb.dds +0 -17
- package/tests/map/data/dataset.grb.dods +0 -0
- package/tests/map/data/lat_lon_bounds.grb.dods +0 -0
- package/tests/map/data/subdataset.grb.dods +0 -0
- package/tests/map/data/vigicrues.observations.json +0 -47042
- package/tests/map/data/vigicrues.stations.json +0 -15422
- package/tests/map/data/zones.json +0 -1228
- package/tests/map/forecast-data/gfs-world/u-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
- package/tests/map/forecast-data/gfs-world/v-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
- package/tests/map/grid-sources.test.js +0 -304
- package/tests/map/hooks.test.js +0 -96
- package/tests/map/index.test.js +0 -333
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>0/143</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>0/74</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>0/34</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>0/129</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
56
|
</p>
|
|
57
57
|
</div>
|
|
58
|
-
<div class='status-line
|
|
58
|
+
<div class='status-line low'></div>
|
|
59
59
|
<pre><table class="coverage">
|
|
60
60
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
61
61
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -336,230 +336,270 @@
|
|
|
336
336
|
<a name='L277'></a><a href='#L277'>277</a>
|
|
337
337
|
<a name='L278'></a><a href='#L278'>278</a>
|
|
338
338
|
<a name='L279'></a><a href='#L279'>279</a>
|
|
339
|
-
<a name='L280'></a><a href='#L280'>280</a
|
|
340
|
-
<
|
|
339
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
340
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
341
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
342
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
343
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
344
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
345
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
346
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
347
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
348
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
349
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
350
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
351
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
352
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
353
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
354
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
355
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
356
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
357
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
358
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
359
|
+
<a name='L300'></a><a href='#L300'>300</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
341
360
|
<span class="cline-any cline-neutral"> </span>
|
|
342
361
|
<span class="cline-any cline-neutral"> </span>
|
|
343
|
-
<span class="cline-any cline-yes">1x</span>
|
|
344
|
-
<span class="cline-any cline-yes">1x</span>
|
|
345
|
-
<span class="cline-any cline-yes">1x</span>
|
|
346
|
-
<span class="cline-any cline-yes">1x</span>
|
|
347
362
|
<span class="cline-any cline-neutral"> </span>
|
|
348
|
-
<span class="cline-any cline-
|
|
363
|
+
<span class="cline-any cline-no"> </span>
|
|
364
|
+
<span class="cline-any cline-no"> </span>
|
|
365
|
+
<span class="cline-any cline-no"> </span>
|
|
366
|
+
<span class="cline-any cline-no"> </span>
|
|
349
367
|
<span class="cline-any cline-neutral"> </span>
|
|
368
|
+
<span class="cline-any cline-no"> </span>
|
|
350
369
|
<span class="cline-any cline-neutral"> </span>
|
|
351
370
|
<span class="cline-any cline-neutral"> </span>
|
|
352
371
|
<span class="cline-any cline-neutral"> </span>
|
|
353
372
|
<span class="cline-any cline-neutral"> </span>
|
|
354
|
-
<span class="cline-any cline-yes">1x</span>
|
|
355
373
|
<span class="cline-any cline-neutral"> </span>
|
|
374
|
+
<span class="cline-any cline-no"> </span>
|
|
356
375
|
<span class="cline-any cline-neutral"> </span>
|
|
357
376
|
<span class="cline-any cline-neutral"> </span>
|
|
358
377
|
<span class="cline-any cline-neutral"> </span>
|
|
359
378
|
<span class="cline-any cline-neutral"> </span>
|
|
360
379
|
<span class="cline-any cline-neutral"> </span>
|
|
361
|
-
<span class="cline-any cline-yes">1x</span>
|
|
362
380
|
<span class="cline-any cline-neutral"> </span>
|
|
381
|
+
<span class="cline-any cline-no"> </span>
|
|
363
382
|
<span class="cline-any cline-neutral"> </span>
|
|
364
|
-
<span class="cline-any cline-yes">1x</span>
|
|
365
|
-
<span class="cline-any cline-yes">1x</span>
|
|
366
383
|
<span class="cline-any cline-neutral"> </span>
|
|
367
384
|
<span class="cline-any cline-neutral"> </span>
|
|
368
|
-
<span class="cline-any cline-
|
|
385
|
+
<span class="cline-any cline-no"> </span>
|
|
369
386
|
<span class="cline-any cline-neutral"> </span>
|
|
370
|
-
<span class="cline-any cline-yes">74x</span>
|
|
371
|
-
<span class="cline-any cline-yes">74x</span>
|
|
372
387
|
<span class="cline-any cline-neutral"> </span>
|
|
373
|
-
<span class="cline-any cline-yes">74x</span>
|
|
374
|
-
<span class="cline-any cline-yes">63x</span>
|
|
375
|
-
<span class="cline-any cline-yes">63x</span>
|
|
376
388
|
<span class="cline-any cline-neutral"> </span>
|
|
377
|
-
<span class="cline-any cline-
|
|
378
|
-
<span class="cline-any cline-
|
|
389
|
+
<span class="cline-any cline-no"> </span>
|
|
390
|
+
<span class="cline-any cline-no"> </span>
|
|
391
|
+
<span class="cline-any cline-no"> </span>
|
|
379
392
|
<span class="cline-any cline-neutral"> </span>
|
|
380
393
|
<span class="cline-any cline-neutral"> </span>
|
|
381
394
|
<span class="cline-any cline-neutral"> </span>
|
|
395
|
+
<span class="cline-any cline-no"> </span>
|
|
396
|
+
<span class="cline-any cline-no"> </span>
|
|
397
|
+
<span class="cline-any cline-no"> </span>
|
|
382
398
|
<span class="cline-any cline-neutral"> </span>
|
|
383
399
|
<span class="cline-any cline-neutral"> </span>
|
|
384
400
|
<span class="cline-any cline-neutral"> </span>
|
|
385
|
-
<span class="cline-any cline-
|
|
386
|
-
<span class="cline-any cline-yes">54x</span>
|
|
401
|
+
<span class="cline-any cline-no"> </span>
|
|
387
402
|
<span class="cline-any cline-neutral"> </span>
|
|
388
|
-
<span class="cline-any cline-yes">54x</span>
|
|
389
|
-
<span class="cline-any cline-yes">54x</span>
|
|
390
|
-
<span class="cline-any cline-yes">54x</span>
|
|
391
|
-
<span class="cline-any cline-yes">54x</span>
|
|
392
|
-
<span class="cline-any cline-yes">54x</span>
|
|
393
403
|
<span class="cline-any cline-neutral"> </span>
|
|
394
|
-
<span class="cline-any cline-
|
|
404
|
+
<span class="cline-any cline-no"> </span>
|
|
405
|
+
<span class="cline-any cline-no"> </span>
|
|
395
406
|
<span class="cline-any cline-neutral"> </span>
|
|
396
|
-
<span class="cline-any cline-yes">43x</span>
|
|
397
407
|
<span class="cline-any cline-neutral"> </span>
|
|
398
|
-
<span class="cline-any cline-
|
|
408
|
+
<span class="cline-any cline-no"> </span>
|
|
399
409
|
<span class="cline-any cline-neutral"> </span>
|
|
400
|
-
<span class="cline-any cline-
|
|
410
|
+
<span class="cline-any cline-no"> </span>
|
|
411
|
+
<span class="cline-any cline-no"> </span>
|
|
401
412
|
<span class="cline-any cline-neutral"> </span>
|
|
402
|
-
<span class="cline-any cline-
|
|
413
|
+
<span class="cline-any cline-no"> </span>
|
|
414
|
+
<span class="cline-any cline-no"> </span>
|
|
415
|
+
<span class="cline-any cline-no"> </span>
|
|
403
416
|
<span class="cline-any cline-neutral"> </span>
|
|
417
|
+
<span class="cline-any cline-no"> </span>
|
|
418
|
+
<span class="cline-any cline-no"> </span>
|
|
404
419
|
<span class="cline-any cline-neutral"> </span>
|
|
405
|
-
<span class="cline-any cline-yes">43x</span>
|
|
406
|
-
<span class="cline-any cline-yes">43x</span>
|
|
407
|
-
<span class="cline-any cline-yes">43x</span>
|
|
408
|
-
<span class="cline-any cline-yes">43x</span>
|
|
409
420
|
<span class="cline-any cline-neutral"> </span>
|
|
410
|
-
<span class="cline-any cline-yes">43x</span>
|
|
411
421
|
<span class="cline-any cline-neutral"> </span>
|
|
412
|
-
<span class="cline-any cline-yes">43x</span>
|
|
413
|
-
<span class="cline-any cline-yes">43x</span>
|
|
414
|
-
<span class="cline-any cline-yes">43x</span>
|
|
415
|
-
<span class="cline-any cline-yes">43x</span>
|
|
416
|
-
<span class="cline-any cline-yes">43x</span>
|
|
417
422
|
<span class="cline-any cline-neutral"> </span>
|
|
418
423
|
<span class="cline-any cline-neutral"> </span>
|
|
419
424
|
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-no"> </span>
|
|
426
|
+
<span class="cline-any cline-no"> </span>
|
|
420
427
|
<span class="cline-any cline-neutral"> </span>
|
|
428
|
+
<span class="cline-any cline-no"> </span>
|
|
429
|
+
<span class="cline-any cline-no"> </span>
|
|
430
|
+
<span class="cline-any cline-no"> </span>
|
|
431
|
+
<span class="cline-any cline-no"> </span>
|
|
432
|
+
<span class="cline-any cline-no"> </span>
|
|
421
433
|
<span class="cline-any cline-neutral"> </span>
|
|
422
|
-
<span class="cline-any cline-
|
|
434
|
+
<span class="cline-any cline-no"> </span>
|
|
423
435
|
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-no"> </span>
|
|
424
437
|
<span class="cline-any cline-neutral"> </span>
|
|
425
|
-
<span class="cline-any cline-
|
|
438
|
+
<span class="cline-any cline-no"> </span>
|
|
426
439
|
<span class="cline-any cline-neutral"> </span>
|
|
440
|
+
<span class="cline-any cline-no"> </span>
|
|
427
441
|
<span class="cline-any cline-neutral"> </span>
|
|
442
|
+
<span class="cline-any cline-no"> </span>
|
|
428
443
|
<span class="cline-any cline-neutral"> </span>
|
|
429
|
-
<span class="cline-any cline-yes">54x</span>
|
|
430
444
|
<span class="cline-any cline-neutral"> </span>
|
|
431
|
-
<span class="cline-any cline-
|
|
432
|
-
<span class="cline-any cline-
|
|
445
|
+
<span class="cline-any cline-no"> </span>
|
|
446
|
+
<span class="cline-any cline-no"> </span>
|
|
447
|
+
<span class="cline-any cline-no"> </span>
|
|
448
|
+
<span class="cline-any cline-no"> </span>
|
|
433
449
|
<span class="cline-any cline-neutral"> </span>
|
|
434
|
-
<span class="cline-any cline-
|
|
450
|
+
<span class="cline-any cline-no"> </span>
|
|
451
|
+
<span class="cline-any cline-neutral"> </span>
|
|
452
|
+
<span class="cline-any cline-no"> </span>
|
|
453
|
+
<span class="cline-any cline-no"> </span>
|
|
454
|
+
<span class="cline-any cline-no"> </span>
|
|
455
|
+
<span class="cline-any cline-no"> </span>
|
|
456
|
+
<span class="cline-any cline-no"> </span>
|
|
435
457
|
<span class="cline-any cline-neutral"> </span>
|
|
436
458
|
<span class="cline-any cline-neutral"> </span>
|
|
437
459
|
<span class="cline-any cline-neutral"> </span>
|
|
438
460
|
<span class="cline-any cline-neutral"> </span>
|
|
439
|
-
<span class="cline-any cline-yes">1x</span>
|
|
440
|
-
<span class="cline-any cline-yes">8x</span>
|
|
441
|
-
<span class="cline-any cline-yes">3x</span>
|
|
442
461
|
<span class="cline-any cline-neutral"> </span>
|
|
462
|
+
<span class="cline-any cline-no"> </span>
|
|
443
463
|
<span class="cline-any cline-neutral"> </span>
|
|
444
464
|
<span class="cline-any cline-neutral"> </span>
|
|
445
|
-
<span class="cline-any cline-
|
|
465
|
+
<span class="cline-any cline-no"> </span>
|
|
446
466
|
<span class="cline-any cline-no"> </span>
|
|
447
467
|
<span class="cline-any cline-neutral"> </span>
|
|
448
468
|
<span class="cline-any cline-neutral"> </span>
|
|
449
469
|
<span class="cline-any cline-neutral"> </span>
|
|
450
|
-
<span class="cline-any cline-yes">66x</span>
|
|
451
470
|
<span class="cline-any cline-neutral"> </span>
|
|
471
|
+
<span class="cline-any cline-no"> </span>
|
|
452
472
|
<span class="cline-any cline-neutral"> </span>
|
|
473
|
+
<span class="cline-any cline-no"> </span>
|
|
474
|
+
<span class="cline-any cline-no"> </span>
|
|
453
475
|
<span class="cline-any cline-neutral"> </span>
|
|
454
|
-
<span class="cline-any cline-
|
|
455
|
-
<span class="cline-any cline-yes">66x</span>
|
|
476
|
+
<span class="cline-any cline-no"> </span>
|
|
456
477
|
<span class="cline-any cline-neutral"> </span>
|
|
457
478
|
<span class="cline-any cline-neutral"> </span>
|
|
458
479
|
<span class="cline-any cline-neutral"> </span>
|
|
459
|
-
<span class="cline-any cline-yes">36x</span>
|
|
460
480
|
<span class="cline-any cline-neutral"> </span>
|
|
461
|
-
<span class="cline-any cline-
|
|
462
|
-
<span class="cline-any cline-
|
|
481
|
+
<span class="cline-any cline-no"> </span>
|
|
482
|
+
<span class="cline-any cline-no"> </span>
|
|
483
|
+
<span class="cline-any cline-no"> </span>
|
|
463
484
|
<span class="cline-any cline-neutral"> </span>
|
|
464
|
-
<span class="cline-any cline-yes">36x</span>
|
|
465
485
|
<span class="cline-any cline-neutral"> </span>
|
|
466
|
-
<span class="cline-any cline-yes">36x</span>
|
|
467
486
|
<span class="cline-any cline-neutral"> </span>
|
|
468
|
-
<span class="cline-any cline-
|
|
487
|
+
<span class="cline-any cline-no"> </span>
|
|
488
|
+
<span class="cline-any cline-no"> </span>
|
|
469
489
|
<span class="cline-any cline-neutral"> </span>
|
|
470
490
|
<span class="cline-any cline-neutral"> </span>
|
|
471
491
|
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-no"> </span>
|
|
472
493
|
<span class="cline-any cline-neutral"> </span>
|
|
473
|
-
<span class="cline-any cline-yes">49x</span>
|
|
474
494
|
<span class="cline-any cline-neutral"> </span>
|
|
475
495
|
<span class="cline-any cline-neutral"> </span>
|
|
476
|
-
<span class="cline-any cline-
|
|
477
|
-
<span class="cline-any cline-
|
|
478
|
-
<span class="cline-any cline-yes">114x</span>
|
|
479
|
-
<span class="cline-any cline-yes">12x</span>
|
|
496
|
+
<span class="cline-any cline-no"> </span>
|
|
497
|
+
<span class="cline-any cline-no"> </span>
|
|
480
498
|
<span class="cline-any cline-neutral"> </span>
|
|
481
499
|
<span class="cline-any cline-neutral"> </span>
|
|
482
500
|
<span class="cline-any cline-neutral"> </span>
|
|
483
|
-
<span class="cline-any cline-
|
|
484
|
-
<span class="cline-any cline-yes">105x</span>
|
|
485
|
-
<span class="cline-any cline-yes">14x</span>
|
|
501
|
+
<span class="cline-any cline-no"> </span>
|
|
486
502
|
<span class="cline-any cline-neutral"> </span>
|
|
487
|
-
<span class="cline-any cline-
|
|
503
|
+
<span class="cline-any cline-no"> </span>
|
|
504
|
+
<span class="cline-any cline-no"> </span>
|
|
488
505
|
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-no"> </span>
|
|
489
507
|
<span class="cline-any cline-neutral"> </span>
|
|
490
|
-
<span class="cline-any cline-
|
|
508
|
+
<span class="cline-any cline-no"> </span>
|
|
491
509
|
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-no"> </span>
|
|
492
511
|
<span class="cline-any cline-neutral"> </span>
|
|
493
512
|
<span class="cline-any cline-neutral"> </span>
|
|
494
513
|
<span class="cline-any cline-neutral"> </span>
|
|
495
514
|
<span class="cline-any cline-neutral"> </span>
|
|
496
|
-
<span class="cline-any cline-
|
|
515
|
+
<span class="cline-any cline-no"> </span>
|
|
497
516
|
<span class="cline-any cline-neutral"> </span>
|
|
498
|
-
<span class="cline-any cline-yes">24x</span>
|
|
499
|
-
<span class="cline-any cline-yes">24x</span>
|
|
500
517
|
<span class="cline-any cline-neutral"> </span>
|
|
518
|
+
<span class="cline-any cline-no"> </span>
|
|
519
|
+
<span class="cline-any cline-no"> </span>
|
|
520
|
+
<span class="cline-any cline-no"> </span>
|
|
521
|
+
<span class="cline-any cline-no"> </span>
|
|
501
522
|
<span class="cline-any cline-neutral"> </span>
|
|
502
|
-
<span class="cline-any cline-yes">24x</span>
|
|
503
523
|
<span class="cline-any cline-neutral"> </span>
|
|
504
524
|
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-no"> </span>
|
|
526
|
+
<span class="cline-any cline-no"> </span>
|
|
527
|
+
<span class="cline-any cline-no"> </span>
|
|
528
|
+
<span class="cline-any cline-neutral"> </span>
|
|
529
|
+
<span class="cline-any cline-no"> </span>
|
|
505
530
|
<span class="cline-any cline-neutral"> </span>
|
|
506
|
-
<span class="cline-any cline-yes">13x</span>
|
|
507
|
-
<span class="cline-any cline-yes">13x</span>
|
|
508
|
-
<span class="cline-any cline-yes">13x</span>
|
|
509
531
|
<span class="cline-any cline-neutral"> </span>
|
|
510
|
-
<span class="cline-any cline-
|
|
532
|
+
<span class="cline-any cline-no"> </span>
|
|
511
533
|
<span class="cline-any cline-neutral"> </span>
|
|
512
534
|
<span class="cline-any cline-neutral"> </span>
|
|
513
535
|
<span class="cline-any cline-neutral"> </span>
|
|
514
536
|
<span class="cline-any cline-neutral"> </span>
|
|
515
|
-
<span class="cline-any cline-yes">2x</span>
|
|
516
537
|
<span class="cline-any cline-neutral"> </span>
|
|
517
|
-
<span class="cline-any cline-
|
|
538
|
+
<span class="cline-any cline-no"> </span>
|
|
518
539
|
<span class="cline-any cline-neutral"> </span>
|
|
540
|
+
<span class="cline-any cline-no"> </span>
|
|
541
|
+
<span class="cline-any cline-no"> </span>
|
|
519
542
|
<span class="cline-any cline-neutral"> </span>
|
|
520
543
|
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-no"> </span>
|
|
521
545
|
<span class="cline-any cline-neutral"> </span>
|
|
522
|
-
<span class="cline-any cline-yes">11x</span>
|
|
523
546
|
<span class="cline-any cline-neutral"> </span>
|
|
524
|
-
<span class="cline-any cline-yes">11x</span>
|
|
525
547
|
<span class="cline-any cline-neutral"> </span>
|
|
526
|
-
<span class="cline-any cline-
|
|
548
|
+
<span class="cline-any cline-no"> </span>
|
|
549
|
+
<span class="cline-any cline-no"> </span>
|
|
550
|
+
<span class="cline-any cline-no"> </span>
|
|
527
551
|
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-no"> </span>
|
|
528
553
|
<span class="cline-any cline-neutral"> </span>
|
|
529
554
|
<span class="cline-any cline-neutral"> </span>
|
|
530
555
|
<span class="cline-any cline-neutral"> </span>
|
|
531
|
-
<span class="cline-any cline-yes">44x</span>
|
|
532
556
|
<span class="cline-any cline-neutral"> </span>
|
|
533
|
-
<span class="cline-any cline-
|
|
534
|
-
<span class="cline-any cline-yes">40x</span>
|
|
557
|
+
<span class="cline-any cline-no"> </span>
|
|
535
558
|
<span class="cline-any cline-neutral"> </span>
|
|
536
|
-
<span class="cline-any cline-
|
|
537
|
-
<span class="cline-any cline-yes">40x</span>
|
|
538
|
-
<span class="cline-any cline-yes">60x</span>
|
|
559
|
+
<span class="cline-any cline-no"> </span>
|
|
539
560
|
<span class="cline-any cline-neutral"> </span>
|
|
540
|
-
<span class="cline-any cline-yes">60x</span>
|
|
541
561
|
<span class="cline-any cline-neutral"> </span>
|
|
542
|
-
<span class="cline-any cline-yes">60x</span>
|
|
543
|
-
<span class="cline-any cline-yes">60x</span>
|
|
544
562
|
<span class="cline-any cline-neutral"> </span>
|
|
545
563
|
<span class="cline-any cline-neutral"> </span>
|
|
546
|
-
<span class="cline-any cline-
|
|
547
|
-
<span class="cline-any cline-
|
|
548
|
-
<span class="cline-any cline-
|
|
549
|
-
<span class="cline-any cline-
|
|
550
|
-
<span class="cline-any cline-
|
|
551
|
-
<span class="cline-any cline-
|
|
552
|
-
<span class="cline-any cline-
|
|
564
|
+
<span class="cline-any cline-no"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-no"> </span>
|
|
567
|
+
<span class="cline-any cline-neutral"> </span>
|
|
568
|
+
<span class="cline-any cline-no"> </span>
|
|
569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
570
|
+
<span class="cline-any cline-neutral"> </span>
|
|
571
|
+
<span class="cline-any cline-neutral"> </span>
|
|
572
|
+
<span class="cline-any cline-neutral"> </span>
|
|
573
|
+
<span class="cline-any cline-no"> </span>
|
|
574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
575
|
+
<span class="cline-any cline-no"> </span>
|
|
576
|
+
<span class="cline-any cline-no"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-no"> </span>
|
|
579
|
+
<span class="cline-any cline-no"> </span>
|
|
580
|
+
<span class="cline-any cline-no"> </span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-no"> </span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-no"> </span>
|
|
585
|
+
<span class="cline-any cline-no"> </span>
|
|
553
586
|
<span class="cline-any cline-neutral"> </span>
|
|
554
|
-
<span class="cline-any cline-yes">60x</span>
|
|
555
587
|
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-no"> </span>
|
|
589
|
+
<span class="cline-any cline-no"> </span>
|
|
590
|
+
<span class="cline-any cline-no"> </span>
|
|
591
|
+
<span class="cline-any cline-no"> </span>
|
|
592
|
+
<span class="cline-any cline-no"> </span>
|
|
593
|
+
<span class="cline-any cline-no"> </span>
|
|
594
|
+
<span class="cline-any cline-no"> </span>
|
|
556
595
|
<span class="cline-any cline-neutral"> </span>
|
|
557
|
-
<span class="cline-any cline-
|
|
558
|
-
<span class="cline-any cline-
|
|
559
|
-
<span class="cline-any cline-
|
|
560
|
-
<span class="cline-any cline-
|
|
596
|
+
<span class="cline-any cline-no"> </span>
|
|
597
|
+
<span class="cline-any cline-no"> </span>
|
|
598
|
+
<span class="cline-any cline-no"> </span>
|
|
599
|
+
<span class="cline-any cline-no"> </span>
|
|
600
|
+
<span class="cline-any cline-no"> </span>
|
|
561
601
|
<span class="cline-any cline-neutral"> </span>
|
|
562
|
-
<span class="cline-any cline-
|
|
602
|
+
<span class="cline-any cline-no"> </span>
|
|
563
603
|
<span class="cline-any cline-neutral"> </span>
|
|
564
604
|
<span class="cline-any cline-neutral"> </span>
|
|
565
605
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -569,12 +609,12 @@
|
|
|
569
609
|
<span class="cline-any cline-neutral"> </span>
|
|
570
610
|
<span class="cline-any cline-neutral"> </span>
|
|
571
611
|
<span class="cline-any cline-neutral"> </span>
|
|
572
|
-
<span class="cline-any cline-
|
|
573
|
-
<span class="cline-any cline-
|
|
574
|
-
<span class="cline-any cline-
|
|
575
|
-
<span class="cline-any cline-
|
|
612
|
+
<span class="cline-any cline-no"> </span>
|
|
613
|
+
<span class="cline-any cline-no"> </span>
|
|
614
|
+
<span class="cline-any cline-no"> </span>
|
|
615
|
+
<span class="cline-any cline-no"> </span>
|
|
576
616
|
<span class="cline-any cline-neutral"> </span>
|
|
577
|
-
<span class="cline-any cline-
|
|
617
|
+
<span class="cline-any cline-no"> </span>
|
|
578
618
|
<span class="cline-any cline-neutral"> </span>
|
|
579
619
|
<span class="cline-any cline-neutral"> </span>
|
|
580
620
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -584,7 +624,7 @@
|
|
|
584
624
|
<span class="cline-any cline-neutral"> </span>
|
|
585
625
|
<span class="cline-any cline-neutral"> </span>
|
|
586
626
|
<span class="cline-any cline-neutral"> </span>
|
|
587
|
-
<span class="cline-any cline-
|
|
627
|
+
<span class="cline-any cline-no"> </span>
|
|
588
628
|
<span class="cline-any cline-neutral"> </span>
|
|
589
629
|
<span class="cline-any cline-neutral"> </span>
|
|
590
630
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -593,7 +633,7 @@
|
|
|
593
633
|
<span class="cline-any cline-neutral"> </span>
|
|
594
634
|
<span class="cline-any cline-neutral"> </span>
|
|
595
635
|
<span class="cline-any cline-neutral"> </span>
|
|
596
|
-
<span class="cline-any cline-
|
|
636
|
+
<span class="cline-any cline-no"> </span>
|
|
597
637
|
<span class="cline-any cline-neutral"> </span>
|
|
598
638
|
<span class="cline-any cline-neutral"> </span>
|
|
599
639
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -619,226 +659,246 @@
|
|
|
619
659
|
import { Ability, AbilityBuilder, toMongoQuery } from 'casl/dist/umd'
|
|
620
660
|
|
|
621
661
|
// Define some alias to simplify ability definitions
|
|
622
|
-
Ability.addAlias('update', 'patch')
|
|
623
|
-
Ability.addAlias('read', ['get', 'find'])
|
|
624
|
-
Ability.addAlias('remove', 'delete')
|
|
625
|
-
Ability.addAlias('all', ['read', 'create', 'update', 'remove'])
|
|
662
|
+
<span class="cstat-no" title="statement not covered" >Ability.addAlias('update', 'patch')</span>
|
|
663
|
+
<span class="cstat-no" title="statement not covered" >Ability.addAlias('read', ['get', 'find'])</span>
|
|
664
|
+
<span class="cstat-no" title="statement not covered" >Ability.addAlias('remove', 'delete')</span>
|
|
665
|
+
<span class="cstat-no" title="statement not covered" >Ability.addAlias('all', ['read', 'create', 'update', 'remove'])</span>
|
|
626
666
|
|
|
627
|
-
export const Roles = {
|
|
667
|
+
export const Roles = <span class="cstat-no" title="statement not covered" >{</span>
|
|
628
668
|
member: 0,
|
|
629
669
|
manager: 1,
|
|
630
670
|
owner: 2
|
|
631
671
|
}
|
|
632
672
|
|
|
633
|
-
export const RoleNames = [
|
|
673
|
+
export const RoleNames = <span class="cstat-no" title="statement not covered" >[</span>
|
|
634
674
|
'member',
|
|
635
675
|
'manager',
|
|
636
676
|
'owner'
|
|
637
677
|
]
|
|
638
678
|
|
|
679
|
+
export function <span class="fstat-no" title="function not covered" >isSeniorRole </span>(roleName, juniorName) {
|
|
680
|
+
<span class="cstat-no" title="statement not covered" > return Roles[roleName] >= Roles[juniorName]</span>
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
export function <span class="fstat-no" title="function not covered" >isJuniorRole </span>(roleName, seniorName) {
|
|
684
|
+
<span class="cstat-no" title="statement not covered" > return Roles[roleName] < Roles[seniorName]</span>
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
export function <span class="fstat-no" title="function not covered" >getSeniorRoles </span>(roleName) {
|
|
688
|
+
const seniorRoles = <span class="cstat-no" title="statement not covered" >[]</span>
|
|
689
|
+
<span class="cstat-no" title="statement not covered" > _.forEach(Roles, <span class="fstat-no" title="function not covered" >ro</span>le => { <span class="cstat-no" title="statement not covered" >if (Roles[roleName] < role) <span class="cstat-no" title="statement not covered" >seniorRoles.push(RoleNames[role]) </span></span>})</span>
|
|
690
|
+
<span class="cstat-no" title="statement not covered" > return seniorRoles</span>
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
export function <span class="fstat-no" title="function not covered" >getJuniorRoles </span>(roleName) {
|
|
694
|
+
const juniorRoles = <span class="cstat-no" title="statement not covered" >[]</span>
|
|
695
|
+
<span class="cstat-no" title="statement not covered" > _.forEach(Roles, <span class="fstat-no" title="function not covered" >ro</span>le => { <span class="cstat-no" title="statement not covered" >if (Roles[roleName] >= role) <span class="cstat-no" title="statement not covered" >juniorRoles.push(RoleNames[role]) </span></span>})</span>
|
|
696
|
+
<span class="cstat-no" title="statement not covered" > return juniorRoles</span>
|
|
697
|
+
}
|
|
698
|
+
|
|
639
699
|
// Hooks that can be added to customize abilities computation
|
|
640
|
-
let hooks = []
|
|
700
|
+
let hooks = <span class="cstat-no" title="statement not covered" >[]</span>
|
|
641
701
|
|
|
642
702
|
// Get the unique global symbol to store resource type / context on a resource object
|
|
643
|
-
export const RESOURCE_TYPE = 'type'
|
|
644
|
-
export const RESOURCE_TYPE_KEY = Symbol.for(RESOURCE_TYPE)
|
|
703
|
+
export const RESOURCE_TYPE = <span class="cstat-no" title="statement not covered" >'type'</span>
|
|
704
|
+
export const RESOURCE_TYPE_KEY = <span class="cstat-no" title="statement not covered" >Symbol.for(RESOURCE_TYPE)</span>
|
|
645
705
|
|
|
646
|
-
export function defineResourceRules (subject, resource, resourceService, can) {
|
|
647
|
-
const role = Roles[resource.permissions]
|
|
706
|
+
export function <span class="fstat-no" title="function not covered" >defineResourceRules </span>(subject, resource, resourceService, can) {
|
|
707
|
+
const role = <span class="cstat-no" title="statement not covered" >Roles[resource.permissions]</span>
|
|
648
708
|
|
|
649
|
-
|
|
650
|
-
can('read', resourceService, { _id: resource._id })
|
|
709
|
+
<span class="cstat-no" title="statement not covered" > if (role >= Roles.member) {</span>
|
|
710
|
+
<span class="cstat-no" title="statement not covered" > can('read', resourceService, { _id: resource._id })</span>
|
|
651
711
|
}
|
|
652
|
-
if (role >= Roles.manager) {
|
|
653
|
-
can('update', resourceService, { _id: resource._id })
|
|
654
|
-
can(['create', 'remove'], 'authorisations', { resource: resource._id })
|
|
712
|
+
<span class="cstat-no" title="statement not covered" > if (role >= Roles.manager) {</span>
|
|
713
|
+
<span class="cstat-no" title="statement not covered" > can('update', resourceService, { _id: resource._id })</span>
|
|
714
|
+
<span class="cstat-no" title="statement not covered" > can(['create', 'remove'], 'authorisations', { resource: resource._id })</span>
|
|
655
715
|
}
|
|
656
|
-
if (role >= Roles.owner) {
|
|
657
|
-
can('remove', resourceService, { _id: resource._id })
|
|
716
|
+
<span class="cstat-no" title="statement not covered" > if (role >= Roles.owner) {</span>
|
|
717
|
+
<span class="cstat-no" title="statement not covered" > can('remove', resourceService, { _id: resource._id })</span>
|
|
658
718
|
}
|
|
659
719
|
}
|
|
660
720
|
|
|
661
721
|
// Hook computing default abilities for a given user
|
|
662
|
-
export function defineUserAbilities (subject, can, cannot) {
|
|
722
|
+
export function <span class="fstat-no" title="function not covered" >defineUserAbilities </span>(subject, can, cannot) {
|
|
663
723
|
// Allow user registration
|
|
664
|
-
can('service', 'users')
|
|
665
|
-
can('create', 'users')
|
|
724
|
+
<span class="cstat-no" title="statement not covered" > can('service', 'users')</span>
|
|
725
|
+
<span class="cstat-no" title="statement not covered" > can('create', 'users')</span>
|
|
666
726
|
// Verification email, reset password, etc.
|
|
667
|
-
can('service', 'account')
|
|
668
|
-
can('create', 'account')
|
|
669
|
-
can('service', 'devices')
|
|
670
|
-
can('update', 'devices')
|
|
671
|
-
can('remove', 'devices')
|
|
727
|
+
<span class="cstat-no" title="statement not covered" > can('service', 'account')</span>
|
|
728
|
+
<span class="cstat-no" title="statement not covered" > can('create', 'account')</span>
|
|
729
|
+
<span class="cstat-no" title="statement not covered" > can('service', 'devices')</span>
|
|
730
|
+
<span class="cstat-no" title="statement not covered" > can('update', 'devices')</span>
|
|
731
|
+
<span class="cstat-no" title="statement not covered" > can('remove', 'devices')</span>
|
|
672
732
|
|
|
673
|
-
if (subject && subject._id) {
|
|
733
|
+
<span class="cstat-no" title="statement not covered" > if (subject && subject._id) {</span>
|
|
674
734
|
// Read user profiles for authorizing
|
|
675
|
-
can('read', 'users')
|
|
735
|
+
<span class="cstat-no" title="statement not covered" > can('read', 'users')</span>
|
|
676
736
|
// Update user profile and destroy it
|
|
677
|
-
can(['update', 'remove'], 'users', { _id: subject._id })
|
|
737
|
+
<span class="cstat-no" title="statement not covered" > can(['update', 'remove'], 'users', { _id: subject._id })</span>
|
|
678
738
|
// Access authorisation service, then rights will be granted on a per-resource basis
|
|
679
|
-
can('service', 'authorisations')
|
|
739
|
+
<span class="cstat-no" title="statement not covered" > can('service', 'authorisations')</span>
|
|
680
740
|
// Access storage service, then rights will be granted on a per-resource basis
|
|
681
|
-
can('service', 'storage')
|
|
741
|
+
<span class="cstat-no" title="statement not covered" > can('service', 'storage')</span>
|
|
682
742
|
// This is for the user avatar
|
|
683
743
|
// take care that the storage service uses 'id' as input but produces _id as output
|
|
684
|
-
can('create', 'storage', { id: 'avatars/' + subject._id.toString() })
|
|
685
|
-
can('create', 'storage', { id: 'avatars/' + subject._id.toString() + '.thumbnail' })
|
|
686
|
-
can('remove', 'storage', { _id: 'avatars/' + subject._id.toString() })
|
|
687
|
-
can('remove', 'storage', { _id: 'avatars/' + subject._id.toString() + '.thumbnail' })
|
|
744
|
+
<span class="cstat-no" title="statement not covered" > can('create', 'storage', { id: 'avatars/' + subject._id.toString() })</span>
|
|
745
|
+
<span class="cstat-no" title="statement not covered" > can('create', 'storage', { id: 'avatars/' + subject._id.toString() + '.thumbnail' })</span>
|
|
746
|
+
<span class="cstat-no" title="statement not covered" > can('remove', 'storage', { _id: 'avatars/' + subject._id.toString() })</span>
|
|
747
|
+
<span class="cstat-no" title="statement not covered" > can('remove', 'storage', { _id: 'avatars/' + subject._id.toString() + '.thumbnail' })</span>
|
|
688
748
|
// Avatar is part of user profiles so that they can be read by any
|
|
689
|
-
can('read', 'storage', { _id: { $regex: '^avatars/*' } })
|
|
749
|
+
<span class="cstat-no" title="statement not covered" > can('read', 'storage', { _id: { $regex: '^avatars/*' } })</span>
|
|
690
750
|
// Verification email, reset password, etc.
|
|
691
|
-
can('service', 'account')
|
|
692
|
-
can('create', 'account')
|
|
693
|
-
can('service', 'devices')
|
|
694
|
-
can('update', 'devices')
|
|
695
|
-
can('remove', 'devices')
|
|
751
|
+
<span class="cstat-no" title="statement not covered" > can('service', 'account')</span>
|
|
752
|
+
<span class="cstat-no" title="statement not covered" > can('create', 'account')</span>
|
|
753
|
+
<span class="cstat-no" title="statement not covered" > can('service', 'devices')</span>
|
|
754
|
+
<span class="cstat-no" title="statement not covered" > can('update', 'devices')</span>
|
|
755
|
+
<span class="cstat-no" title="statement not covered" > can('remove', 'devices')</span>
|
|
696
756
|
}
|
|
697
757
|
}
|
|
698
758
|
|
|
699
759
|
// Compute abilities for a given user
|
|
700
|
-
export function defineAbilities (subject) {
|
|
701
|
-
const { rules, can, cannot } = AbilityBuilder.extract()
|
|
760
|
+
export async function <span class="fstat-no" title="function not covered" >defineAbilities </span>(subject, ...args) {
|
|
761
|
+
const { rules, can, cannot } = <span class="cstat-no" title="statement not covered" >AbilityBuilder.extract()</span>
|
|
702
762
|
|
|
703
|
-
// Run registered hooks
|
|
704
|
-
hooks.
|
|
763
|
+
// Run registered hooks providing any additional arguments used to handle complex use cases
|
|
764
|
+
<span class="cstat-no" title="statement not covered" > await Promise.all(hooks.map(<span class="fstat-no" title="function not covered" >as</span>ync hook => {</span>
|
|
765
|
+
<span class="cstat-no" title="statement not covered" > await hook(subject, can, cannot, ...args)</span>
|
|
766
|
+
}))
|
|
705
767
|
|
|
706
768
|
// CASL cannot infer the object type from the object itself so we need
|
|
707
769
|
// to tell it how he can find the object type, i.e. service name.
|
|
708
|
-
return new Ability(rules, {
|
|
709
|
-
subjectName:
|
|
710
|
-
if (!resource || typeof resource === 'string') {
|
|
711
|
-
return resource
|
|
770
|
+
<span class="cstat-no" title="statement not covered" > return new Ability(rules, {</span>
|
|
771
|
+
subjectName: <span class="fstat-no" title="function not covered" >re</span>source => {
|
|
772
|
+
<span class="cstat-no" title="statement not covered" > if (!resource || typeof resource === 'string') {</span>
|
|
773
|
+
<span class="cstat-no" title="statement not covered" > return resource</span>
|
|
712
774
|
}
|
|
713
|
-
return resource[RESOURCE_TYPE_KEY]
|
|
775
|
+
<span class="cstat-no" title="statement not covered" > return resource[RESOURCE_TYPE_KEY]</span>
|
|
714
776
|
}
|
|
715
777
|
})
|
|
716
778
|
}
|
|
717
779
|
|
|
718
|
-
defineAbilities.registerHook = function (hook) {
|
|
719
|
-
if (!hooks.includes(hook)) {
|
|
720
|
-
hooks.push(hook)
|
|
780
|
+
<span class="cstat-no" title="statement not covered" >defineAbilities.registerHook = <span class="fstat-no" title="function not covered" >fu</span>nction (hook) {</span>
|
|
781
|
+
<span class="cstat-no" title="statement not covered" > if (!hooks.includes(hook)) {</span>
|
|
782
|
+
<span class="cstat-no" title="statement not covered" > hooks.push(hook)</span>
|
|
721
783
|
}
|
|
722
784
|
}
|
|
723
785
|
|
|
724
|
-
defineAbilities.unregisterHook = <span class="fstat-no" title="function not covered" >
|
|
725
|
-
<span class="cstat-no" title="statement not covered" > hooks =
|
|
786
|
+
<span class="cstat-no" title="statement not covered" >defineAbilities.unregisterHook = <span class="fstat-no" title="function not covered" >fu</span>nction (hook) {</span>
|
|
787
|
+
<span class="cstat-no" title="statement not covered" > hooks = hooks.filter(<span class="fstat-no" title="function not covered" >re</span>gisteredHook => <span class="cstat-no" title="statement not covered" >registeredHook !== hook)</span></span>
|
|
726
788
|
}
|
|
727
789
|
|
|
728
|
-
export function hasServiceAbilities (abilities, service) {
|
|
729
|
-
|
|
790
|
+
export function <span class="fstat-no" title="function not covered" >hasServiceAbilities </span>(abilities, service) {
|
|
791
|
+
<span class="cstat-no" title="statement not covered" > if (!abilities) <span class="cstat-no" title="statement not covered" >return false</span></span>
|
|
730
792
|
// The unique identifier of a service is its path not its name.
|
|
731
793
|
// Indeed we have for instance a 'groups' service in each organisation
|
|
732
794
|
// Take care that in client we have the service path while on server we have the actual object
|
|
733
|
-
const path =
|
|
734
|
-
return abilities.can('service', path) || abilities.can('service', _.replace(path, /^.*\//, '*/'))
|
|
795
|
+
const path = <span class="cstat-no" title="statement not covered" >typeof service === 'string' ? service : service.getPath()</span>
|
|
796
|
+
<span class="cstat-no" title="statement not covered" > return abilities.can('service', path) || abilities.can('service', _.replace(path, /^.*\//, '*/'))</span>
|
|
735
797
|
}
|
|
736
798
|
|
|
737
|
-
export function hasResourceAbilities (abilities, operation, resourceType, context, resource) {
|
|
738
|
-
|
|
799
|
+
export function <span class="fstat-no" title="function not covered" >hasResourceAbilities </span>(abilities, operation, resourceType, context, resource) {
|
|
800
|
+
<span class="cstat-no" title="statement not covered" > if (!abilities) <span class="cstat-no" title="statement not covered" >return false</span></span>
|
|
739
801
|
// Create a shallow copy adding context and type
|
|
740
|
-
const object = Object.assign({}, resource)
|
|
741
|
-
object[RESOURCE_TYPE_KEY] = resourceType
|
|
802
|
+
const object = <span class="cstat-no" title="statement not covered" >Object.assign({}, resource)</span>
|
|
803
|
+
<span class="cstat-no" title="statement not covered" > object[RESOURCE_TYPE_KEY] = resourceType</span>
|
|
742
804
|
// Add a virtual context to take it into account for object having no link to it
|
|
743
|
-
if (context) object.context = (typeof context === 'object' ? context._id.toString() :
|
|
805
|
+
<span class="cstat-no" title="statement not covered" > if (context) <span class="cstat-no" title="statement not covered" >object.context = (typeof context === 'object' ? context._id.toString() : context.toString())</span></span>
|
|
744
806
|
|
|
745
|
-
const result = abilities.can(operation, object)
|
|
807
|
+
const result = <span class="cstat-no" title="statement not covered" >abilities.can(operation, object)</span>
|
|
746
808
|
|
|
747
|
-
return result
|
|
809
|
+
<span class="cstat-no" title="statement not covered" > return result</span>
|
|
748
810
|
}
|
|
749
811
|
|
|
750
812
|
// Utility function used to remove the virtual context from query
|
|
751
|
-
export function removeContext (query) {
|
|
752
|
-
_.forOwn(query, (
|
|
813
|
+
export function <span class="fstat-no" title="function not covered" >removeContext </span>(query) {
|
|
814
|
+
<span class="cstat-no" title="statement not covered" > _.forOwn(query, <span class="fstat-no" title="function not covered" >(v</span>alue, key) => {</span>
|
|
753
815
|
// Process current attributes or recurse
|
|
754
816
|
// Take care to nested fields like 'field._id'
|
|
755
|
-
if (key === 'context') {
|
|
756
|
-
delete query.context
|
|
757
|
-
} else if (Array.isArray(value)) {
|
|
758
|
-
value.forEach(
|
|
817
|
+
<span class="cstat-no" title="statement not covered" > if (key === 'context') {</span>
|
|
818
|
+
<span class="cstat-no" title="statement not covered" > delete query.context</span>
|
|
819
|
+
} else <span class="cstat-no" title="statement not covered" >if (Array.isArray(value)) {</span>
|
|
820
|
+
<span class="cstat-no" title="statement not covered" > value.forEach(<span class="fstat-no" title="function not covered" >it</span>em => <span class="cstat-no" title="statement not covered" >removeContext(item))</span></span>
|
|
759
821
|
// Remove empty objects from array
|
|
760
822
|
// _.remove(value, item => _.isEmpty(item))
|
|
761
823
|
// Remove empty arrays from query
|
|
762
|
-
|
|
763
|
-
} else if (typeof value === 'object') {
|
|
764
|
-
removeContext(value)
|
|
824
|
+
<span class="cstat-no" title="statement not covered" > if (_.isEmpty(value)) <span class="cstat-no" title="statement not covered" >delete query[key]</span></span>
|
|
825
|
+
} else <span class="cstat-no" title="statement not covered" >if (typeof value === 'object') {</span>
|
|
826
|
+
<span class="cstat-no" title="statement not covered" > removeContext(value)</span>
|
|
765
827
|
// Remove empty objects from query
|
|
766
|
-
|
|
828
|
+
<span class="cstat-no" title="statement not covered" > if (_.isEmpty(value)) <span class="cstat-no" title="statement not covered" >delete query[key]</span></span>
|
|
767
829
|
}
|
|
768
830
|
})
|
|
769
|
-
return query
|
|
831
|
+
<span class="cstat-no" title="statement not covered" > return query</span>
|
|
770
832
|
}
|
|
771
833
|
|
|
772
834
|
// Get the query used to filter the objects according to given abilities
|
|
773
835
|
// A null query indicates that access should not be granted
|
|
774
|
-
export function getQueryForAbilities (abilities, operation, resourceType) {
|
|
775
|
-
|
|
836
|
+
export function <span class="fstat-no" title="function not covered" >getQueryForAbilities </span>(abilities, operation, resourceType) {
|
|
837
|
+
<span class="cstat-no" title="statement not covered" > if (!abilities) <span class="cstat-no" title="statement not covered" >return null</span></span>
|
|
776
838
|
|
|
777
|
-
const rules = abilities.rulesFor(operation, resourceType)
|
|
778
|
-
const query = toMongoQuery(rules)
|
|
839
|
+
const rules = <span class="cstat-no" title="statement not covered" >abilities.rulesFor(operation, resourceType)</span>
|
|
840
|
+
const query = <span class="cstat-no" title="statement not covered" >toMongoQuery(rules)</span>
|
|
779
841
|
// Remove any context to avoid taking it into account because it is not really stored on objects
|
|
780
842
|
// We clone the object here because of references to the abilities rules (see https://github.com/kalisio/kdk/issues/384)
|
|
781
|
-
return (query ? removeContext(_.cloneDeep(query)) : null)
|
|
843
|
+
<span class="cstat-no" title="statement not covered" > return (query ? removeContext(_.cloneDeep(query)) : null)</span>
|
|
782
844
|
}
|
|
783
845
|
|
|
784
|
-
function buildSubjectsQueryForResource (resourceScope, resourceId, role) {
|
|
785
|
-
const query = { [resourceScope]: { $elemMatch: { _id: resourceId } } }
|
|
786
|
-
|
|
787
|
-
_.set(query[resourceScope], '$elemMatch.permissions', (typeof role === 'string' ?
|
|
846
|
+
function <span class="fstat-no" title="function not covered" >buildSubjectsQueryForResource </span>(resourceScope, resourceId, role) {
|
|
847
|
+
const query = <span class="cstat-no" title="statement not covered" >{ [resourceScope]: { $elemMatch: { _id: resourceId } } }</span>
|
|
848
|
+
<span class="cstat-no" title="statement not covered" > if (role) {</span>
|
|
849
|
+
<span class="cstat-no" title="statement not covered" > _.set(query[resourceScope], '$elemMatch.permissions', (typeof role === 'string' ? role : RoleNames[role]))</span>
|
|
788
850
|
}
|
|
789
|
-
return query
|
|
851
|
+
<span class="cstat-no" title="statement not covered" > return query</span>
|
|
790
852
|
}
|
|
791
853
|
|
|
792
|
-
export function findSubjectsForResource (subjectService, resourceScope, resourceId, role) {
|
|
854
|
+
export function <span class="fstat-no" title="function not covered" >findSubjectsForResource </span>(subjectService, resourceScope, resourceId, role) {
|
|
793
855
|
// Build the query
|
|
794
|
-
const query = buildSubjectsQueryForResource(resourceScope, resourceId, role)
|
|
856
|
+
const query = <span class="cstat-no" title="statement not covered" >buildSubjectsQueryForResource(resourceScope, resourceId, role)</span>
|
|
795
857
|
// Execute the query
|
|
796
|
-
return subjectService.find({ query })
|
|
858
|
+
<span class="cstat-no" title="statement not covered" > return subjectService.find({ query })</span>
|
|
797
859
|
}
|
|
798
860
|
|
|
799
|
-
export function countSubjectsForResource (subjectService, resourceScope, resourceId, role) {
|
|
861
|
+
export function <span class="fstat-no" title="function not covered" >countSubjectsForResource </span>(subjectService, resourceScope, resourceId, role) {
|
|
800
862
|
// Build the query
|
|
801
|
-
const query = buildSubjectsQueryForResource(resourceScope, resourceId, role)
|
|
863
|
+
const query = <span class="cstat-no" title="statement not covered" >buildSubjectsQueryForResource(resourceScope, resourceId, role)</span>
|
|
802
864
|
// Indicate we'd only like to count
|
|
803
|
-
query.$limit = 0
|
|
865
|
+
<span class="cstat-no" title="statement not covered" > query.$limit = 0</span>
|
|
804
866
|
// Execute the query
|
|
805
|
-
return subjectService.find({ query })
|
|
867
|
+
<span class="cstat-no" title="statement not covered" > return subjectService.find({ query })</span>
|
|
806
868
|
}
|
|
807
869
|
|
|
808
870
|
// Hook computing organisation abilities for a given user
|
|
809
|
-
export function defineOrganisationAbilities (subject, can, cannot) {
|
|
810
|
-
if (subject) {
|
|
871
|
+
export function <span class="fstat-no" title="function not covered" >defineOrganisationAbilities </span>(subject, can, cannot) {
|
|
872
|
+
<span class="cstat-no" title="statement not covered" > if (subject) {</span>
|
|
811
873
|
// Create new organisations
|
|
812
|
-
can('service', 'organisations')
|
|
813
|
-
can('create', 'organisations')
|
|
874
|
+
<span class="cstat-no" title="statement not covered" > can('service', 'organisations')</span>
|
|
875
|
+
<span class="cstat-no" title="statement not covered" > can('create', 'organisations')</span>
|
|
814
876
|
|
|
815
|
-
|
|
816
|
-
subject.organisations.forEach(
|
|
817
|
-
|
|
877
|
+
<span class="cstat-no" title="statement not covered" > if (subject.organisations) {</span>
|
|
878
|
+
<span class="cstat-no" title="statement not covered" > subject.organisations.forEach(<span class="fstat-no" title="function not covered" >or</span>ganisation => {</span>
|
|
879
|
+
<span class="cstat-no" title="statement not covered" > if (organisation._id) {</span>
|
|
818
880
|
// Generic rules for resources
|
|
819
|
-
defineResourceRules(subject, organisation, 'organisations', can)
|
|
881
|
+
<span class="cstat-no" title="statement not covered" > defineResourceRules(subject, organisation, 'organisations', can)</span>
|
|
820
882
|
// Specific rules for organisations
|
|
821
|
-
const role = Roles[organisation.permissions]
|
|
822
|
-
|
|
883
|
+
const role = <span class="cstat-no" title="statement not covered" >Roles[organisation.permissions]</span>
|
|
884
|
+
<span class="cstat-no" title="statement not covered" > if (role >= Roles.member) {</span>
|
|
823
885
|
// The unique identifier of a service is its path not its name.
|
|
824
886
|
// Indeed we have for instance a 'groups' service in each organisation.
|
|
825
|
-
can('service', organisation._id.toString() + '/members')
|
|
826
|
-
can('read', 'members', { context: organisation._id })
|
|
827
|
-
can('service', organisation._id.toString() + '/tags')
|
|
828
|
-
can('read', 'tags', { context: organisation._id })
|
|
829
|
-
can('service', organisation._id.toString() + '/groups')
|
|
830
|
-
can('service', organisation._id.toString() + '/storage')
|
|
831
|
-
can(['read', 'create', 'remove'], 'storage', { context: organisation._id })
|
|
887
|
+
<span class="cstat-no" title="statement not covered" > can('service', organisation._id.toString() + '/members')</span>
|
|
888
|
+
<span class="cstat-no" title="statement not covered" > can('read', 'members', { context: organisation._id })</span>
|
|
889
|
+
<span class="cstat-no" title="statement not covered" > can('service', organisation._id.toString() + '/tags')</span>
|
|
890
|
+
<span class="cstat-no" title="statement not covered" > can('read', 'tags', { context: organisation._id })</span>
|
|
891
|
+
<span class="cstat-no" title="statement not covered" > can('service', organisation._id.toString() + '/groups')</span>
|
|
892
|
+
<span class="cstat-no" title="statement not covered" > can('service', organisation._id.toString() + '/storage')</span>
|
|
893
|
+
<span class="cstat-no" title="statement not covered" > can(['read', 'create', 'remove'], 'storage', { context: organisation._id })</span>
|
|
832
894
|
}
|
|
833
|
-
if (role >= Roles.manager) {
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
can('
|
|
837
|
-
can('
|
|
838
|
-
can('create', 'groups', { context: organisation._id })
|
|
839
|
-
can(['create', 'remove'], 'tags', { context: organisation._id })
|
|
895
|
+
<span class="cstat-no" title="statement not covered" > if (role >= Roles.manager) {</span>
|
|
896
|
+
<span class="cstat-no" title="statement not covered" > can('update', 'members', { context: organisation._id })</span>
|
|
897
|
+
<span class="cstat-no" title="statement not covered" > can('update', 'tags', { context: organisation._id })</span>
|
|
898
|
+
<span class="cstat-no" title="statement not covered" > can('create', 'groups', { context: organisation._id })</span>
|
|
899
|
+
<span class="cstat-no" title="statement not covered" > can(['create', 'remove'], 'tags', { context: organisation._id })</span>
|
|
840
900
|
// Remove invited members
|
|
841
|
-
can(['remove'], 'users', { 'sponsor.organisationId': organisation._id })
|
|
901
|
+
<span class="cstat-no" title="statement not covered" > can(['remove'], 'users', { 'sponsor.organisationId': organisation._id })</span>
|
|
842
902
|
}
|
|
843
903
|
}
|
|
844
904
|
})
|
|
@@ -847,13 +907,13 @@ export function defineOrganisationAbilities (subject, can, cannot) {
|
|
|
847
907
|
}
|
|
848
908
|
|
|
849
909
|
// Hook computing group abilities for a given user
|
|
850
|
-
export function defineGroupAbilities (subject, can, cannot) {
|
|
851
|
-
if (subject) {
|
|
852
|
-
if (subject.groups) {
|
|
853
|
-
subject.groups.forEach(
|
|
854
|
-
|
|
910
|
+
export function <span class="fstat-no" title="function not covered" >defineGroupAbilities </span>(subject, can, cannot) {
|
|
911
|
+
<span class="cstat-no" title="statement not covered" > if (subject) {</span>
|
|
912
|
+
<span class="cstat-no" title="statement not covered" > if (subject.groups) {</span>
|
|
913
|
+
<span class="cstat-no" title="statement not covered" > subject.groups.forEach(<span class="fstat-no" title="function not covered" >gr</span>oup => {</span>
|
|
914
|
+
<span class="cstat-no" title="statement not covered" > if (group._id) {</span>
|
|
855
915
|
// Generic rules for resources
|
|
856
|
-
defineResourceRules(subject, group, 'groups', can)
|
|
916
|
+
<span class="cstat-no" title="statement not covered" > defineResourceRules(subject, group, 'groups', can)</span>
|
|
857
917
|
// No specific rules for groups
|
|
858
918
|
}
|
|
859
919
|
})
|
|
@@ -862,37 +922,37 @@ export function defineGroupAbilities (subject, can, cannot) {
|
|
|
862
922
|
}
|
|
863
923
|
|
|
864
924
|
// Helper functions to find the members of a given organisation
|
|
865
|
-
export function findMembersOfOrganisation (usersService, organisationId, role) {
|
|
866
|
-
return findSubjectsForResource(usersService, 'organisations', organisationId, role)
|
|
925
|
+
export function <span class="fstat-no" title="function not covered" >findMembersOfOrganisation </span>(usersService, organisationId, role) {
|
|
926
|
+
<span class="cstat-no" title="statement not covered" > return findSubjectsForResource(usersService, 'organisations', organisationId, role)</span>
|
|
867
927
|
}
|
|
868
928
|
|
|
869
|
-
export function <span class="fstat-no" title="function not covered" >countMembersOfOrganisation
|
|
870
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
929
|
+
export function <span class="fstat-no" title="function not covered" >countMembersOfOrganisation </span>(usersService, organisationId, role) {
|
|
930
|
+
<span class="cstat-no" title="statement not covered" > return countSubjectsForResource(usersService, 'organisations', organisationId, role)</span>
|
|
871
931
|
}
|
|
872
932
|
|
|
873
933
|
// Helper functions to find the members of a given group
|
|
874
|
-
export function findMembersOfGroup (membersService, groupId, role) {
|
|
875
|
-
return findSubjectsForResource(membersService, 'groups', groupId, role)
|
|
934
|
+
export function <span class="fstat-no" title="function not covered" >findMembersOfGroup </span>(membersService, groupId, role) {
|
|
935
|
+
<span class="cstat-no" title="statement not covered" > return findSubjectsForResource(membersService, 'groups', groupId, role)</span>
|
|
876
936
|
}
|
|
877
937
|
|
|
878
|
-
export function <span class="fstat-no" title="function not covered" >countMembersOfGroup
|
|
879
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
938
|
+
export function <span class="fstat-no" title="function not covered" >countMembersOfGroup </span>(membersService, groupId, role) {
|
|
939
|
+
<span class="cstat-no" title="statement not covered" > return countSubjectsForResource(membersService, 'groups', groupId, role)</span>
|
|
880
940
|
}
|
|
881
941
|
|
|
882
|
-
export function <span class="fstat-no" title="function not covered" >getRoleForOrganisation
|
|
883
|
-
const result = <span class="cstat-no" title="statement not covered" >_.
|
|
884
|
-
<span class="cstat-no" title="statement not covered" > if (!_.isUndefined(result)) <span class="cstat-no" title="statement not covered" >return
|
|
885
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
942
|
+
export function <span class="fstat-no" title="function not covered" >getRoleForOrganisation </span>(user, organisationId) {
|
|
943
|
+
const result = <span class="cstat-no" title="statement not covered" >_.find(user.organisations, { _id: organisationId })</span>
|
|
944
|
+
<span class="cstat-no" title="statement not covered" > if (!_.isUndefined(result)) <span class="cstat-no" title="statement not covered" >return result.permissions</span></span>
|
|
945
|
+
<span class="cstat-no" title="statement not covered" > return undefined</span>
|
|
886
946
|
}
|
|
887
947
|
|
|
888
|
-
export function <span class="fstat-no" title="function not covered" >getRoleForGroup
|
|
889
|
-
const result = <span class="cstat-no" title="statement not covered" >_.
|
|
890
|
-
<span class="cstat-no" title="statement not covered" > if (!_.isUndefined(result)) <span class="cstat-no" title="statement not covered" >return
|
|
891
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
948
|
+
export function <span class="fstat-no" title="function not covered" >getRoleForGroup </span>(user, organisationId, groupId) {
|
|
949
|
+
const result = <span class="cstat-no" title="statement not covered" >_.find(user.groups, { context: organisationId, _id: groupId })</span>
|
|
950
|
+
<span class="cstat-no" title="statement not covered" > if (!_.isUndefined(result)) <span class="cstat-no" title="statement not covered" >return result.permissions</span></span>
|
|
951
|
+
<span class="cstat-no" title="statement not covered" > return undefined</span>
|
|
892
952
|
}
|
|
893
953
|
|
|
894
|
-
export function <span class="fstat-no" title="function not covered" >findGroupsWithRole
|
|
895
|
-
<span class="cstat-no" title="statement not covered" > return _
|
|
954
|
+
export function <span class="fstat-no" title="function not covered" >findGroupsWithRole </span>(user, organisationId, role) {
|
|
955
|
+
<span class="cstat-no" title="statement not covered" > return _.filter(user.groups || [], { context: organisationId, permissions: (typeof role === 'string' ? role : RoleNames[role]) })</span>
|
|
896
956
|
}
|
|
897
957
|
</pre></td></tr></table></pre>
|
|
898
958
|
|
|
@@ -901,7 +961,7 @@ export function <span class="fstat-no" title="function not covered" >findGroupsW
|
|
|
901
961
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
902
962
|
Code coverage generated by
|
|
903
963
|
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
|
904
|
-
at
|
|
964
|
+
at Fri Jan 07 2022 19:29:57 GMT+0100 (GMT+01:00)
|
|
905
965
|
</div>
|
|
906
966
|
</div>
|
|
907
967
|
<script src="../../prettify.js"></script>
|