lesli 5.0.13 → 5.0.14
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.
- checksums.yaml +4 -4
- data/app/assets/config/lesli_manifest.js +3 -6
- data/app/assets/images/lesli/brand/app-icon.svg +45 -39
- data/app/assets/javascripts/lesli/application.js +1 -0
- data/app/controllers/lesli/abouts_controller.rb +16 -14
- data/app/controllers/lesli/application_controller.rb +13 -0
- data/app/controllers/lesli/application_devise_controller.rb +10 -12
- data/app/controllers/lesli/application_lesli_controller.rb +12 -11
- data/app/controllers/lesli/apps_controller.rb +6 -0
- data/app/controllers/lesli/roles_controller.rb +2 -2
- data/app/helpers/lesli/general_helper.rb +18 -5
- data/app/helpers/lesli/html_helper.rb +8 -0
- data/app/helpers/lesli/navigation_helper.rb +30 -11
- data/app/helpers/lesli/system_helper.rb +2 -2
- data/app/helpers/lesli/turbo_helper.rb +58 -0
- data/app/interfaces/lesli/customization_interface.rb +42 -0
- data/app/interfaces/lesli/requester_interface.rb +103 -0
- data/app/interfaces/lesli/responder_interface.rb +127 -0
- data/app/lib/date2.rb +1 -199
- data/app/lib/lesli/courier.rb +54 -0
- data/app/mailers/lesli/application_lesli_mailer.rb +32 -59
- data/app/mailers/lesli/devise_mailer.rb +16 -8
- data/app/models/concerns/account_initializer.rb +27 -68
- data/app/models/concerns/lesli/has_activities.rb +29 -0
- data/app/models/concerns/user_extensions.rb +34 -19
- data/app/models/concerns/user_security.rb +4 -4
- data/app/models/lesli/account.rb +13 -20
- data/{lib/scss/layouts/application-container.scss → app/models/lesli/item/activity.rb} +11 -8
- data/app/models/lesli/role/{power.rb → action.rb} +6 -4
- data/app/models/lesli/role.rb +7 -15
- data/app/models/lesli/shared/catalog.rb +20 -0
- data/app/models/lesli/shared/dashboard.rb +1 -1
- data/app/models/lesli/user/activity.rb +5 -0
- data/app/models/lesli/user/detail.rb +5 -5
- data/app/models/lesli/user/{log.rb → journal.rb} +3 -3
- data/app/models/lesli/user/{power.rb → role.rb} +2 -3
- data/app/models/lesli/user/session.rb +3 -4
- data/app/models/lesli/user.rb +50 -46
- data/app/operators/lesli/controller_operator.rb +3 -1
- data/app/operators/lesli/{role_descriptor_operator.rb → role_operator.rb} +51 -28
- data/app/operators/lesli/user_registration_operator.rb +3 -2
- data/app/services/lesli/application_lesli_service.rb +8 -4
- data/app/services/lesli/role/action_service.rb +58 -0
- data/app/services/lesli/role_service.rb +232 -0
- data/app/services/lesli/{user_session_service.rb → user/session_service.rb} +23 -14
- data/app/services/lesli/user_service.rb +85 -1
- data/app/views/lesli/apps/show.html.erb +52 -0
- data/app/views/lesli/layouts/application-devise.html.erb +5 -7
- data/app/views/lesli/layouts/application-lesli.html.erb +18 -24
- data/app/views/lesli/partials/_application-analytics.html.erb +2 -2
- data/app/views/lesli/partials/_application-data.html.erb +3 -77
- data/app/views/lesli/partials/_application-head.html.erb +7 -4
- data/app/views/lesli/partials/_application-lesli-annoouncements.html.erb +49 -0
- data/app/views/lesli/partials/_application-lesli-header.html.erb +73 -49
- data/app/views/lesli/partials/_application-lesli-javascript.html.erb +3 -16
- data/app/views/lesli/partials/_application-lesli-navigation.html.erb +12 -9
- data/app/views/lesli/partials/{_application-lesli-notices.html.erb → _application-lesli-notifications.html.erb} +10 -8
- data/app/views/lesli/partials/_application-lesli-scss.html.erb +1 -1
- data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +1 -1
- data/app/views/lesli/partials/_application-public-javascript.html.erb +1 -4
- data/app/views/lesli/shared/dashboards/_show.html.erb +63 -0
- data/app/views/lesli/wrappers/_application-devise.html.erb +4 -6
- data/config/importmap.rb +14 -0
- data/config/initializers/lesli.rb +20 -12
- data/config/initializers/lesli_migration_helpers.rb +61 -0
- data/config/locales/translations.en.yml +1 -26
- data/config/locales/translations.es.yml +1 -26
- data/config/locales/translations.fr.yml +1 -26
- data/config/locales/translations.it.yml +1 -26
- data/config/locales/translations.pt.yml +1 -26
- data/config/routes.rb +3 -1
- data/db/migrate/v1/{0010000110_create_lesli_accounts.rb → 0000000110_create_lesli_accounts.rb} +13 -12
- data/db/migrate/v1/0000000210_create_lesli_roles.rb +65 -0
- data/db/migrate/v1/0000000310_create_lesli_users.rb +99 -0
- data/db/migrate/v1/{0010000610_create_lesli_system_controllers.rb → 0000100110_create_lesli_system_controllers.rb} +3 -3
- data/db/migrate/v1/{0010000710_create_lesli_system_controller_actions.rb → 0000100210_create_lesli_system_controller_actions.rb} +3 -4
- data/{lib/scss/layouts/application-content.scss → db/migrate/v1/0000110310_create_lesli_account_settings.rb} +8 -6
- data/{app/models/lesli/user/agent.rb → db/migrate/v1/0000110410_create_lesli_account_activities.rb} +3 -3
- data/db/migrate/v1/0000120210_create_lesli_role_actions.rb +45 -0
- data/db/migrate/v1/{0010001410_create_lesli_account_logs.rb → 0000120310_create_lesli_role_privileges.rb} +8 -8
- data/db/{tables/0010003810_create_user_shortcuts.rb → migrate/v1/0000130210_create_lesli_user_roles.rb} +9 -12
- data/db/migrate/v1/0000130310_create_lesli_user_sessions.rb +56 -0
- data/db/{seed/production.rb → migrate/v1/0000130410_create_lesli_user_activities.rb} +7 -4
- data/db/{tables/0010001110_create_account_locations.rb → migrate2/0000100510_create_lesli_account_locations.rb} +6 -6
- data/db/{tables/0010001510_create_account_currencies.rb → migrate2/0000100610_create_lesli_account_currencies.rb} +4 -4
- data/db/seed/{development/accounts.rb → accounts.rb} +6 -2
- data/db/seed/{production/users.rb → users.rb} +4 -10
- data/db/seed/{tools.rb → xyz.rb} +2 -7
- data/db/seeds.rb +3 -2
- data/db/structure/00000020_catalogs.json +0 -0
- data/lib/generators/{application_lesli_generator.rb → application_lesli_generator_base.rb} +4 -4
- data/lib/generators/lesli/spec/spec_generator.rb +2 -2
- data/lib/generators/lesli/view/USAGE +8 -0
- data/lib/generators/lesli/view/templates/spec-factory.template +17 -0
- data/lib/generators/lesli/view/templates/spec-model.template +70 -0
- data/lib/generators/lesli/view/view_generator.rb +25 -0
- data/lib/lesli/configuration.rb +7 -10
- data/lib/lesli/engine.rb +22 -3
- data/lib/lesli/r_spec.rb +5 -2
- data/lib/lesli/routing.rb +42 -9
- data/lib/lesli/version.rb +2 -2
- data/lib/lesli.rb +11 -0
- data/lib/migrate/common.rb +94 -0
- data/lib/migrate/items/action_structure.rb +51 -0
- data/{db/migrate/v1/0010001210_create_lesli_account_activities.rb → lib/migrate/items/activity_structure.rb} +18 -16
- data/lib/migrate/items/attachment_structure.rb +62 -0
- data/{app/views/lesli/partials/_application-lesli-engines.html.erb → lib/migrate/items/discussion_structure.rb} +19 -27
- data/lib/migrate/items/subscriber_structure.rb +49 -0
- data/lib/migrate/items/version_structure.rb +53 -0
- data/lib/migrate/shared/account_structure.rb +21 -0
- data/lib/migrate/shared/catalog_structure.rb +30 -0
- data/lib/migrate/shared/dashboard_structure.rb +54 -0
- data/lib/migrate/shared/setting_structure.rb +20 -0
- data/lib/rspec/config/spec_coverage.rb +95 -0
- data/{db/migrate/v1/0010001110_create_lesli_account_settings.rb → lib/rspec/factories/lesli_account.rb} +10 -7
- data/{db/seed/development.rb → lib/rspec/factories/lesli_role.rb} +30 -3
- data/{db/seed/test.rb → lib/rspec/factories/lesli_user.rb} +32 -3
- data/lib/rspec/fixtures/files/lesli-icon.png +0 -0
- data/lib/rspec/fixtures/files/test_file_1.docx +0 -0
- data/{db/tables/0010001610_create_account_currency_exchange_rates.rb → lib/rspec/helpers/lesli_helper.rb} +21 -21
- data/lib/rspec/helpers/rails_helper.rb +134 -0
- data/lib/rspec/helpers/response_request_helper.rb +214 -0
- data/lib/rspec/helpers/response_service_helper.rb +66 -0
- data/lib/rspec/helpers/spec_helper.rb +99 -0
- data/lib/rspec/lesli_api_tester.rb +133 -0
- data/lib/rspec/lesli_service_tester.rb +46 -0
- data/{db/tables/0010001410_create_account_files.rb → lib/rspec/testers/controller.rb} +31 -20
- data/lib/rspec/testers/model.rb +36 -0
- data/lib/rspec/testers/request.rb +84 -0
- data/lib/tasks/lesli/db.rake +5 -3
- data/lib/tasks/lesli/git.rake +28 -32
- data/lib/tasks/lesli/github.rake +89 -0
- data/lib/tasks/lesli_tasks.rake +3 -3
- data/readme.md +28 -17
- metadata +134 -394
- data/app/assets/fonts/lesli/Domine/Domine-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/Domine/OFL.txt +0 -97
- data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
- data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +0 -1
- data/app/assets/fonts/lesli/Remix/remixicon.svg +0 -7633
- data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +0 -11
- data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
- data/app/assets/fonts/lesli/Roboto/LICENSE.txt +0 -202
- data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
- data/app/assets/icons/lesli/engine-admin.svg +0 -1
- data/app/assets/icons/lesli/engine-audit.svg +0 -1
- data/app/assets/icons/lesli/engine-babel.svg +0 -1
- data/app/assets/icons/lesli/engine-bell.svg +0 -1
- data/app/assets/icons/lesli/engine-books.svg +0 -1
- data/app/assets/icons/lesli/engine-calendar.svg +0 -1
- data/app/assets/icons/lesli/engine-dashboard.svg +0 -1
- data/app/assets/icons/lesli/engine-dispatcher.svg +0 -1
- data/app/assets/icons/lesli/engine-focus.svg +0 -1
- data/app/assets/icons/lesli/engine-kb.svg +0 -1
- data/app/assets/icons/lesli/engine-leaf.svg +0 -1
- data/app/assets/icons/lesli/engine-lesli.svg +0 -1
- data/app/assets/icons/lesli/engine-letter.svg +0 -1
- data/app/assets/icons/lesli/engine-mailer.svg +0 -1
- data/app/assets/icons/lesli/engine-one.svg +0 -1
- data/app/assets/icons/lesli/engine-profile.svg +0 -1
- data/app/assets/icons/lesli/engine-proposal.svg +0 -1
- data/app/assets/icons/lesli/engine-scraper.svg +0 -1
- data/app/assets/icons/lesli/engine-security.svg +0 -1
- data/app/assets/icons/lesli/engine-shared.svg +0 -1
- data/app/assets/icons/lesli/engine-shield.svg +0 -1
- data/app/assets/icons/lesli/engine-storage.svg +0 -1
- data/app/assets/icons/lesli/engine-support.svg +0 -1
- data/app/assets/icons/lesli/engine-talk.svg +0 -1
- data/app/assets/icons/lesli/engine-team.svg +0 -1
- data/app/assets/icons/lesli/engine-time.svg +0 -1
- data/app/assets/icons/lesli/locale-en.svg +0 -1
- data/app/assets/icons/lesli/locale-es.svg +0 -1
- data/app/assets/icons/lesli/locale-fr.svg +0 -1
- data/app/assets/icons/lesli/locale-it.svg +0 -1
- data/app/assets/icons/lesli/locale-pt.svg +0 -1
- data/app/assets/icons/readme.md +0 -10
- data/app/assets/javascripts/lesli/templates/application.js +0 -14
- data/app/assets/javascripts/lesli/templates/public.js +0 -14
- data/app/assets/stylesheets/lesli/templates/application.css +0 -2918
- data/app/assets/stylesheets/lesli/templates/public.css +0 -1
- data/app/controllers/lesli/interfaces/application/authorization.rb +0 -107
- data/app/controllers/lesli/interfaces/application/customization.rb +0 -46
- data/app/controllers/lesli/interfaces/application/logger.rb +0 -134
- data/app/controllers/lesli/interfaces/application/requester.rb +0 -84
- data/app/controllers/lesli/interfaces/application/responder.rb +0 -132
- data/app/controllers/lesli/interfaces/controllers/actions.rb +0 -250
- data/app/controllers/lesli/interfaces/controllers/activities.rb +0 -215
- data/app/controllers/lesli/interfaces/controllers/discussions.rb +0 -270
- data/app/controllers/lesli/interfaces/controllers/files.rb +0 -467
- data/app/controllers/lesli/interfaces/controllers/subscribers.rb +0 -234
- data/app/lib/lesli/system.rb +0 -110
- data/app/models/lesli/cloud_object/action.rb +0 -70
- data/app/models/lesli/cloud_object/activity.rb +0 -311
- data/app/models/lesli/cloud_object/custom_field.rb +0 -158
- data/app/models/lesli/cloud_object/discussion.rb +0 -219
- data/app/models/lesli/cloud_object/subscriber.rb +0 -186
- data/app/operators/lesli/descriptor_privilege_operator.rb +0 -75
- data/app/views/lesli/emails/devise_mailer/confirmation_instructions.html.erb +0 -23
- data/app/views/lesli/emails/devise_mailer/reset_password_instructions.html.erb +0 -23
- data/app/views/lesli/partials/_application-lesli-icons.html.erb +0 -1
- data/config/initializers/devise.rb +0 -336
- data/db/seed/development/users.rb +0 -52
- data/db/seed/production/accounts.rb +0 -50
- data/db/structure/00000000_people.json +0 -34
- data/db/structure/00000003_actions.json +0 -14
- data/db/structure/00000004_activities.json +0 -20
- data/db/structure/00000005_discussions.json +0 -8
- data/db/structure/00000006_files.json +0 -32
- data/db/structure/00000007_subscribers.json +0 -11
- data/db/structure/00000501_dashboards.json +0 -14
- data/db/structure/00000502_dashboard_components.json +0 -23
- data/db/tables/0010003410_create_user_activities.rb +0 -51
- data/db/tables/0010003710_create_user_codes.rb +0 -43
- data/db/tables/0010004110_create_user_tokens.rb +0 -45
- data/db/tables/0010005610_create_role_activities.rb +0 -50
- data/db/tables/0010009010_create_feedbacks.rb +0 -56
- data/lib/mailer_previews/devise_mailer_preview.rb +0 -49
- data/lib/scss/cloud-objects/discussion.scss +0 -80
- data/lib/scss/cloud-objects/file.scss +0 -138
- data/lib/scss/components/keypad.scss +0 -109
- data/lib/scss/elements/autocomplete.scss +0 -72
- data/lib/scss/elements/card.scss +0 -37
- data/lib/scss/elements/empty.scss +0 -43
- data/lib/scss/elements/file-uploader.scss +0 -74
- data/lib/scss/elements/gallery.scss +0 -98
- data/lib/scss/elements/input-tag.scss +0 -73
- data/lib/scss/elements/loading.scss +0 -63
- data/lib/scss/elements/map.scss +0 -107
- data/lib/scss/elements/navbar.scss +0 -115
- data/lib/scss/elements/table.scss +0 -118
- data/lib/scss/elements/toolbar.scss +0 -66
- data/lib/scss/fonts/families.scss +0 -47
- data/lib/scss/fonts/mdicons.scss +0 -82
- data/lib/scss/fonts/remixicons.scss +0 -2602
- data/lib/scss/helpers/display.scss +0 -44
- data/lib/scss/helpers/tooltip.scss +0 -91
- data/lib/scss/layouts/application-announcements.scss +0 -40
- data/lib/scss/layouts/application-component.scss +0 -39
- data/lib/scss/layouts/application-engines.scss +0 -125
- data/lib/scss/layouts/application-footer.scss +0 -102
- data/lib/scss/layouts/application-header.scss +0 -91
- data/lib/scss/layouts/application-navigation.scss +0 -79
- data/lib/scss/layouts/application-search.scss +0 -71
- data/lib/scss/layouts/application-sidebar.scss +0 -219
- data/lib/scss/overrides/notification.scss +0 -75
- data/lib/scss/overrides/sweetalert.scss +0 -106
- data/lib/scss/pages/devise-simple.scss +0 -89
- data/lib/scss/pages/devise.scss +0 -179
- data/lib/scss/pages/invites.scss +0 -81
- data/lib/scss/panels/panel-announcements.scss +0 -56
- data/lib/scss/panels/panel-notification.scss +0 -67
- data/lib/scss/panels/panel-profile.scss +0 -62
- data/lib/scss/panels/panel-support-ticket.scss +0 -56
- data/lib/scss/panels/panel-tasks.scss +0 -41
- data/lib/scss/settings/variables.scss +0 -148
- data/lib/scss/shared/workflow-status-progress.scss +0 -135
- data/lib/scss/templates/application.scss +0 -127
- data/lib/scss/templates/component.scss +0 -39
- data/lib/scss/templates/dashboards.scss +0 -53
- data/lib/scss/templates/empty.scss +0 -42
- data/lib/scss/templates/pdf.scss +0 -45
- data/lib/scss/templates/public.scss +0 -72
- data/lib/vue/application.js +0 -285
- data/lib/vue/cloudobjects/discussion/content.vue +0 -62
- data/lib/vue/cloudobjects/discussion/element.vue +0 -170
- data/lib/vue/cloudobjects/discussion/filters.vue +0 -108
- data/lib/vue/cloudobjects/discussion/new.vue +0 -134
- data/lib/vue/cloudobjects/discussion.vue +0 -99
- data/lib/vue/cloudobjects/stores/discussion.js +0 -212
- data/lib/vue/layouts/application-announcements.vue +0 -78
- data/lib/vue/layouts/application-component.vue +0 -38
- data/lib/vue/layouts/application-container.vue +0 -48
- data/lib/vue/layouts/application-engines.vue +0 -66
- data/lib/vue/layouts/application-footer.vue +0 -123
- data/lib/vue/layouts/application-header.vue +0 -252
- data/lib/vue/layouts/application-navbar.vue +0 -110
- data/lib/vue/layouts/application-search.vue +0 -86
- data/lib/vue/layouts/application-sidebar.vue +0 -63
- data/lib/vue/pages/errors/app.js +0 -32
- data/lib/vue/pages/invites/app.js +0 -76
- data/lib/vue/pages/mfas/application.js +0 -77
- data/lib/vue/pages/onboarding/application.js +0 -45
- data/lib/vue/pages/onboarding/components/address.vue +0 -120
- data/lib/vue/pages/onboarding/components/buttons.vue +0 -67
- data/lib/vue/pages/onboarding/components/contact.vue +0 -148
- data/lib/vue/pages/onboarding/components/date-time.vue +0 -265
- data/lib/vue/pages/onboarding/components/finish.vue +0 -62
- data/lib/vue/pages/onboarding/components/general-info.vue +0 -93
- data/lib/vue/pages/onboarding/components/indicators.vue +0 -78
- data/lib/vue/pages/onboarding/components/welcome.vue +0 -66
- data/lib/vue/pages/onboarding/show.vue +0 -67
- data/lib/vue/pages/onboarding/store.js +0 -165
- data/lib/vue/pages/otps/application.js +0 -90
- data/lib/vue/pages/passes/application.js +0 -80
- data/lib/vue/pages/websites/application.js +0 -34
- data/lib/vue/panels/panel-announcements.vue +0 -248
- data/lib/vue/panels/panel-bell-notifications.vue +0 -102
- data/lib/vue/panels/panel-files.vue +0 -281
- data/lib/vue/panels/panel-profile.vue +0 -76
- data/lib/vue/panels/panel-support-tickets.vue +0 -163
- data/lib/vue/panels/panel-tasks.vue +0 -124
- data/lib/vue/panels/stores/bell-notifications.js +0 -46
- data/lib/vue/panels/stores/support-tickets.js +0 -103
- data/lib/vue/public.js +0 -83
- data/lib/vue/refactor/shared/cloudobjects/action.vue +0 -193
- data/lib/vue/refactor/shared/cloudobjects/file/grid.vue +0 -215
- data/lib/vue/refactor/shared/cloudobjects/file/list.vue +0 -106
- data/lib/vue/refactor/shared/cloudobjects/file.vue +0 -145
- data/lib/vue/refactor/shared/workflows2/apps/actions/form.vue +0 -232
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/chatroom-form.vue +0 -103
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-clone-form.vue +0 -125
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-file-form.vue +0 -102
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/email-form.vue +0 -190
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/notification-form.vue +0 -124
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/send-cloud-object-file.vue +0 -170
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/task-form.vue +0 -258
- data/lib/vue/refactor/shared/workflows2/apps/actions/index.vue +0 -146
- data/lib/vue/refactor/shared/workflows2/apps/checks/form.vue +0 -200
- data/lib/vue/refactor/shared/workflows2/apps/checks/index.vue +0 -160
- data/lib/vue/refactor/shared/workflows2/apps/index.vue +0 -177
- data/lib/vue/refactor/shared/workflows2/apps/new.vue +0 -97
- data/lib/vue/refactor/shared/workflows2/apps/show.vue +0 -146
- data/lib/vue/refactor/shared/workflows2/components/associations.vue +0 -215
- data/lib/vue/refactor/shared/workflows2/components/chart.vue +0 -91
- data/lib/vue/refactor/shared/workflows2/components/workflow-form.vue +0 -466
- data/lib/vue/refactor/shared/workflows2/components/workflow-status-dropdown.vue +0 -129
- data/lib/vue/refactor/stores/cloudobjects/action.js +0 -181
- data/lib/vue/refactor/stores/cloudobjects/file.js +0 -205
- data/lib/vue/refactor/stores/entities/announcements.js +0 -75
- data/lib/vue/refactor/stores/entities/dashboard.js +0 -251
- data/lib/vue/refactor/stores/entities/workflow.js +0 -185
- data/lib/vue/refactor/stores/panels/announcements.js +0 -153
- data/lib/vue/refactor/stores/panels/notification.js +0 -114
- data/lib/vue/refactor/stores/panels/task.js +0 -66
- data/lib/vue/refactor/stores/panels/tickets.js +0 -129
- data/lib/vue/refactor/stores/role.js +0 -243
- data/lib/vue/refactor/stores/translations.json +0 -60
- data/lib/vue/refactor/stores/users.js +0 -98
- data/lib/vue/shared/dashboards/apps/edit.vue +0 -215
- data/lib/vue/shared/dashboards/apps/index.vue +0 -112
- data/lib/vue/shared/dashboards/apps/new.vue +0 -89
- data/lib/vue/shared/dashboards/apps/show.vue +0 -88
- data/lib/vue/shared/dashboards/components/form.vue +0 -246
- data/lib/vue/shared/services/firebase.js +0 -163
- data/lib/vue/shared/services/translator.js +0 -87
- data/lib/vue/shared/stores/command.js +0 -154
- data/lib/vue/shared/stores/dashboard.js +0 -253
- data/lib/vue/shared/stores/layout.js +0 -61
- data/lib/vue/shared/stores/systemController.js +0 -67
- data/lib/vue/shared/stores/users.js +0 -57
- data/lib/vue/stores/translations.json +0 -177
- data/lib/vue/translation.js +0 -45
- data/lib/webpack/base.js +0 -191
- data/lib/webpack/core.js +0 -93
- data/lib/webpack/engines.js +0 -167
- data/lib/webpack/root.js +0 -105
- data/lib/webpack/version.js +0 -78
- data/vendor/bulma/LICENSE +0 -21
- data/vendor/bulma/bulma.sass +0 -10
- data/vendor/bulma/css/bulma-rtl.css +0 -11851
- data/vendor/bulma/css/bulma-rtl.min.css +0 -1
- data/vendor/bulma/css/bulma.css +0 -11851
- data/vendor/bulma/css/bulma.min.css +0 -1
- data/vendor/bulma/sass/base/_all.sass +0 -6
- data/vendor/bulma/sass/base/animations.sass +0 -5
- data/vendor/bulma/sass/base/generic.sass +0 -145
- data/vendor/bulma/sass/base/helpers.sass +0 -1
- data/vendor/bulma/sass/base/minireset.sass +0 -79
- data/vendor/bulma/sass/components/_all.sass +0 -15
- data/vendor/bulma/sass/components/breadcrumb.sass +0 -77
- data/vendor/bulma/sass/components/card.sass +0 -103
- data/vendor/bulma/sass/components/dropdown.sass +0 -83
- data/vendor/bulma/sass/components/level.sass +0 -79
- data/vendor/bulma/sass/components/media.sass +0 -59
- data/vendor/bulma/sass/components/menu.sass +0 -59
- data/vendor/bulma/sass/components/message.sass +0 -101
- data/vendor/bulma/sass/components/modal.sass +0 -117
- data/vendor/bulma/sass/components/navbar.sass +0 -446
- data/vendor/bulma/sass/components/pagination.sass +0 -167
- data/vendor/bulma/sass/components/panel.sass +0 -121
- data/vendor/bulma/sass/components/tabs.sass +0 -176
- data/vendor/bulma/sass/elements/_all.sass +0 -16
- data/vendor/bulma/sass/elements/box.sass +0 -26
- data/vendor/bulma/sass/elements/button.sass +0 -357
- data/vendor/bulma/sass/elements/container.sass +0 -29
- data/vendor/bulma/sass/elements/content.sass +0 -162
- data/vendor/bulma/sass/elements/form.sass +0 -1
- data/vendor/bulma/sass/elements/icon.sass +0 -46
- data/vendor/bulma/sass/elements/image.sass +0 -73
- data/vendor/bulma/sass/elements/notification.sass +0 -52
- data/vendor/bulma/sass/elements/other.sass +0 -31
- data/vendor/bulma/sass/elements/progress.sass +0 -73
- data/vendor/bulma/sass/elements/table.sass +0 -134
- data/vendor/bulma/sass/elements/tag.sass +0 -140
- data/vendor/bulma/sass/elements/title.sass +0 -70
- data/vendor/bulma/sass/form/_all.sass +0 -9
- data/vendor/bulma/sass/form/checkbox-radio.sass +0 -22
- data/vendor/bulma/sass/form/file.sass +0 -184
- data/vendor/bulma/sass/form/input-textarea.sass +0 -66
- data/vendor/bulma/sass/form/select.sass +0 -88
- data/vendor/bulma/sass/form/shared.sass +0 -60
- data/vendor/bulma/sass/form/tools.sass +0 -215
- data/vendor/bulma/sass/grid/_all.sass +0 -5
- data/vendor/bulma/sass/grid/columns.sass +0 -513
- data/vendor/bulma/sass/grid/tiles.sass +0 -36
- data/vendor/bulma/sass/helpers/_all.sass +0 -12
- data/vendor/bulma/sass/helpers/color.sass +0 -39
- data/vendor/bulma/sass/helpers/flexbox.sass +0 -35
- data/vendor/bulma/sass/helpers/float.sass +0 -10
- data/vendor/bulma/sass/helpers/other.sass +0 -14
- data/vendor/bulma/sass/helpers/overflow.sass +0 -2
- data/vendor/bulma/sass/helpers/position.sass +0 -7
- data/vendor/bulma/sass/helpers/spacing.sass +0 -31
- data/vendor/bulma/sass/helpers/typography.sass +0 -103
- data/vendor/bulma/sass/helpers/visibility.sass +0 -122
- data/vendor/bulma/sass/layout/_all.sass +0 -6
- data/vendor/bulma/sass/layout/footer.sass +0 -11
- data/vendor/bulma/sass/layout/hero.sass +0 -153
- data/vendor/bulma/sass/layout/section.sass +0 -17
- data/vendor/bulma/sass/utilities/_all.sass +0 -9
- data/vendor/bulma/sass/utilities/animations.sass +0 -1
- data/vendor/bulma/sass/utilities/controls.sass +0 -49
- data/vendor/bulma/sass/utilities/derived-variables.sass +0 -114
- data/vendor/bulma/sass/utilities/extends.sass +0 -25
- data/vendor/bulma/sass/utilities/functions.sass +0 -135
- data/vendor/bulma/sass/utilities/initial-variables.sass +0 -79
- data/vendor/bulma/sass/utilities/mixins.sass +0 -303
- data/vendor/lesli-css/_index.scss +0 -34
- data/vendor/lesli-css/lesli.scss +0 -51
- data/vendor/lesli-css/license +0 -28
- data/vendor/lesli-css/src/base/fonts.scss +0 -50
- data/vendor/lesli-css/src/base/normalize.scss +0 -118
- data/vendor/lesli-css/src/components/blockquote.scss +0 -61
- data/vendor/lesli-css/src/components/columns.scss +0 -92
- data/vendor/lesli-css/src/components/container.scss +0 -47
- data/vendor/lesli-css/src/components/navigation.scss +0 -59
- data/vendor/lesli-css/src/functions/colors.scss +0 -184
- data/vendor/lesli-css/src/helpers/units.scss +0 -44
- data/vendor/lesli-css/src/mixins/breakpoint.scss +0 -184
- data/vendor/lesli-css/src/mixins/flex.scss +0 -80
- data/vendor/lesli-css/src/mixins/scrollbar.scss +0 -46
- data/vendor/lesli-css/src/settings/variables.scss +0 -26
- data/vendor/lesli-css/tests/base/normalize.spec.scss +0 -125
- data/vendor/lesli-css/tests/functions/colors.spec.scss +0 -117
- data/vendor/lesli-css/tests/mixins/breakpoint.spec.scss +0 -429
- data/vendor/lesli-css/tests/mixins/scrollbar.spec.scss +0 -82
- data/vendor/lesli-css/vendor/normalize.scss +0 -351
- data/vendor/remixicon/License +0 -201
- data/vendor/remixicon/fonts/remixicon.css +0 -2583
- /data/{vendor/lesli-css/src/components/grid.scss → app/assets/stylesheets/lesli/application.css} +0 -0
- /data/db/migrate/v1/{0010001010_create_lesli_account_details.rb → 0000110210_create_lesli_account_details.rb} +0 -0
- /data/db/structure/{00000008_custom_fields.json → 00000300_custom_fields.json} +0 -0
- /data/lib/assets/javascripts/lesli/{i18n.js → i18n_js} +0 -0
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Lesli
|
4
4
|
|
5
|
-
Copyright (c)
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
6
6
|
|
7
7
|
This program is free software: you can redistribute it and/or modify
|
8
8
|
it under the terms of the GNU General Public License as published by
|
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
|
|
19
19
|
|
20
20
|
Lesli · Ruby on Rails SaaS Development Framework.
|
21
21
|
|
22
|
-
Made with ♥ by
|
22
|
+
Made with ♥ by LesliTech
|
23
23
|
Building a better future, one line of code at a time.
|
24
24
|
|
25
25
|
@contact hello@lesli.tech
|
@@ -33,90 +33,49 @@ Building a better future, one line of code at a time.
|
|
33
33
|
module AccountInitializer
|
34
34
|
extend ActiveSupport::Concern
|
35
35
|
|
36
|
-
|
37
36
|
# initialize minimum resources needed for the account
|
38
37
|
def initialize_account
|
39
38
|
|
40
|
-
return unless defined?(LesliSecurity)
|
41
|
-
|
42
|
-
# create initial descriptors
|
43
|
-
descriptor_owner = self.descriptors.find_or_create_by(name: "owner")
|
44
|
-
descriptor_admin = self.descriptors.find_or_create_by(name: "admin")
|
45
|
-
descriptor_profile = self.descriptors.find_or_create_by(name: "profile")
|
46
39
|
|
47
40
|
# create default roles for the new account
|
48
|
-
owner = self.roles
|
49
|
-
|
50
|
-
|
51
|
-
|
41
|
+
owner = self.roles
|
42
|
+
.create_with({ permission_level: 2147483647 })
|
43
|
+
.find_or_create_by(:name => "owner")
|
44
|
+
|
52
45
|
|
53
46
|
# platform administrator role
|
54
|
-
admin = self.roles
|
55
|
-
|
56
|
-
|
47
|
+
admin = self.roles
|
48
|
+
.create_with({ permission_level: 100000})
|
49
|
+
.find_or_create_by(name: "admin")
|
50
|
+
|
57
51
|
|
58
52
|
# access only to user profile
|
59
|
-
limited = self.roles
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
admin.powers.create_with({
|
69
|
-
plist: true, pindex: true, pshow: true, pcreate: true, pupdate: true, pdestroy: true
|
70
|
-
}).find_or_create_by(:descriptor => descriptor_admin)
|
71
|
-
|
72
|
-
limited.powers.create_with({
|
73
|
-
plist: true, pindex: true, pshow: true, pcreate: true, pupdate: true, pdestroy: true
|
74
|
-
}).find_or_create_by(:descriptor => descriptor_profile)
|
53
|
+
limited = self.roles
|
54
|
+
.create_with({ permission_level: 10, path_default: "/administration/profile" })
|
55
|
+
.find_or_create_by(name: "limited")
|
56
|
+
|
57
|
+
|
58
|
+
# Add base privileges to roles
|
59
|
+
Lesli::RoleOperator.new(owner).add_owner_actions
|
60
|
+
Lesli::RoleOperator.new(admin).add_owner_actions
|
61
|
+
Lesli::RoleOperator.new(limited).add_profile_privileges
|
75
62
|
end
|
76
63
|
|
77
64
|
|
78
65
|
# initialize engines for new accounts
|
79
66
|
def initialize_engines
|
80
67
|
|
81
|
-
|
82
|
-
if defined? LesliAdmin
|
83
|
-
LesliAdmin::Account.create!(:account => self) if self.admin.blank?
|
84
|
-
end
|
85
|
-
|
86
|
-
# 03.01 LesliCalendar - Unified calendar app
|
87
|
-
if defined? LesliCalendar
|
88
|
-
LesliCalendar::Account.create!(:account => self) if self.calendar.blank?
|
89
|
-
end
|
90
|
-
|
91
|
-
# 03.05 LesliLetter - Notes & Notebooks
|
92
|
-
if defined? LesliLetter
|
93
|
-
LesliLetter::Account.create!(:account => self) if self.letter.blank?
|
94
|
-
end
|
68
|
+
LesliSystem.engines.each do |engine, data|
|
95
69
|
|
96
|
-
|
97
|
-
if defined? LesliDashboard
|
98
|
-
LesliDashboard::Account.create!(:account => self) if self.dashboard.blank?
|
99
|
-
end
|
70
|
+
next if ["Lesli", "LesliBabel", "LesliShield", "Root"].include?(engine)
|
100
71
|
|
101
|
-
|
102
|
-
|
103
|
-
LesliBell::Account.create!(:account => self) if self.bell.blank?
|
104
|
-
end
|
72
|
+
# Skip if the engine is not defined
|
73
|
+
next unless Object.const_defined?(engine)
|
105
74
|
|
106
|
-
|
107
|
-
if defined? LesliAudit
|
108
|
-
LesliAudit::Account.create!(:account => self) if self.audit.blank?
|
109
|
-
end
|
75
|
+
#next if self.public_send(attribute).blank?
|
110
76
|
|
111
|
-
|
112
|
-
|
113
|
-
LesliSupport::Account.create!(:account => self) if self.support.blank?
|
77
|
+
# Create an associated account if the attribute is blank
|
78
|
+
engine.constantize::Account.create!(account: self)
|
114
79
|
end
|
115
|
-
|
116
|
-
# 08.02 LesliSecurity - Users, Privileges & Access Management
|
117
|
-
if defined? LesliGuard
|
118
|
-
LesliGuard::Account.create!(:account => self) if self.guard.blank?
|
119
|
-
end
|
120
|
-
|
121
|
-
end
|
80
|
+
end
|
122
81
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
module Lesli
|
3
|
+
module HasActivities
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
class_methods do
|
7
|
+
def has_activities_with(custom_table_name)
|
8
|
+
has_many :activities, class_name: "Lesli::Item::Activity"
|
9
|
+
|
10
|
+
Lesli::Item::Activity.class_eval do
|
11
|
+
self.table_name = custom_table_name.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# thread safe - does not work yet
|
16
|
+
def has_activities_with2(custom_table_name)
|
17
|
+
|
18
|
+
# Define a unique class name per model using the model's namespace
|
19
|
+
klass = Class.new(Lesli::Item::Activity) do
|
20
|
+
self.table_name = custom_table_name
|
21
|
+
end
|
22
|
+
|
23
|
+
const_set("LocalActivity", klass)
|
24
|
+
|
25
|
+
has_many :activities, class_name: "#{self.name}::LocalActivity"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -37,6 +37,19 @@ module UserExtensions
|
|
37
37
|
extend ActiveSupport::Concern
|
38
38
|
|
39
39
|
|
40
|
+
# @return [nil]
|
41
|
+
# @description Set the user alias based on the full_name.
|
42
|
+
# @example
|
43
|
+
# puts current_user.full_name # John Doe
|
44
|
+
# puts current_user.set_alias # John D.
|
45
|
+
def set_alias
|
46
|
+
if self.alias.blank?
|
47
|
+
self.alias = full_name_initials()
|
48
|
+
self.save
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
40
53
|
# @return [void]
|
41
54
|
# @description Register a new notification for the current user
|
42
55
|
# @param subject String Short notification description
|
@@ -47,6 +60,22 @@ module UserExtensions
|
|
47
60
|
Courier::Bell::Notification.new(self, subject, body:body, url:url, category:category)
|
48
61
|
end
|
49
62
|
|
63
|
+
# @return [void]
|
64
|
+
# @description Register a new notification for the current user
|
65
|
+
# @param subject String Short notification description
|
66
|
+
# @param body String Long notification description
|
67
|
+
# @param url String Link to notified object
|
68
|
+
# @param category String Kind of notification: info, warning, danger, success.
|
69
|
+
def notifications quantity=5, category:"info"
|
70
|
+
query = {
|
71
|
+
:pagination => {
|
72
|
+
:perPage => quantity,
|
73
|
+
:page => 1
|
74
|
+
}
|
75
|
+
}
|
76
|
+
Lesli::Courier.new(:lesli_bell, []).from(:notification_service, self, query).call(:index)
|
77
|
+
end
|
78
|
+
|
50
79
|
|
51
80
|
# @return [CloudDriver::Calendar]
|
52
81
|
# @description Return the default calendar of the user if source_code is not provided.
|
@@ -57,12 +86,6 @@ module UserExtensions
|
|
57
86
|
end
|
58
87
|
|
59
88
|
|
60
|
-
# @return [String] The first name of this user.
|
61
|
-
def name2
|
62
|
-
self.first_name
|
63
|
-
end
|
64
|
-
|
65
|
-
|
66
89
|
# @return [String] The name of this user.
|
67
90
|
# @description Retrieves and returns the name of the user depending on the available information.
|
68
91
|
# The name can be a full name (first and last names), just the first name, or, in case the information
|
@@ -87,19 +110,6 @@ module UserExtensions
|
|
87
110
|
end
|
88
111
|
|
89
112
|
|
90
|
-
# @return [nil]
|
91
|
-
# @description Set the user alias based on the full_name.
|
92
|
-
# @example
|
93
|
-
# puts current_user.full_name # John Doe
|
94
|
-
# puts current_user.set_alias # John D.
|
95
|
-
def set_alias
|
96
|
-
if self.alias.blank?
|
97
|
-
self.alias = full_name_initials()
|
98
|
-
self.save
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
|
103
113
|
# @return [String]
|
104
114
|
# @description Returns the local configuration for the user if there is no locale the default local
|
105
115
|
# of the platform will be returned
|
@@ -120,6 +130,11 @@ module UserExtensions
|
|
120
130
|
end
|
121
131
|
|
122
132
|
|
133
|
+
def role_names
|
134
|
+
user_roles = self.lesliroles.map(&:name).join(", ")
|
135
|
+
end
|
136
|
+
|
137
|
+
|
123
138
|
# @return [void]
|
124
139
|
# @description Returns MFA settings configured by the user
|
125
140
|
# Example
|
@@ -40,12 +40,12 @@ module UserSecurity
|
|
40
40
|
def max_object_level_permission
|
41
41
|
|
42
42
|
# get the max object level permission from roles assigned to the user
|
43
|
-
level = self.
|
43
|
+
level = self.lesliroles.maximum(:permission_level)
|
44
44
|
|
45
45
|
# if user has no roles assigned, we return the lowest role available
|
46
46
|
# NOTE: This should not be possible due the user needs a role to login
|
47
47
|
unless level
|
48
|
-
return (self.account.roles.minimum(:
|
48
|
+
return (self.account.roles.minimum(:permission_level))
|
49
49
|
end
|
50
50
|
|
51
51
|
# return the level found
|
@@ -76,7 +76,7 @@ module UserSecurity
|
|
76
76
|
return !self.privileges
|
77
77
|
.where("lesli_role_privileges.controller = ?", controller)
|
78
78
|
.where("lesli_role_privileges.action = ?", action)
|
79
|
-
.first.blank?
|
79
|
+
.first.blank?
|
80
80
|
rescue => exception
|
81
81
|
return false
|
82
82
|
end
|
@@ -182,7 +182,7 @@ module UserSecurity
|
|
182
182
|
# Example: we should use the path of the admin role if user has
|
183
183
|
# admin & employee roles, also order by default_path, so we get first
|
184
184
|
# the roles with path in case the user has roles with the same object level permission
|
185
|
-
role = self.
|
185
|
+
role = self.lesliroles.order(object_level_permission: :desc).order(:path_default)
|
186
186
|
|
187
187
|
# get the first role found, due previously we sort in a descendant order
|
188
188
|
# the first role is going to be the one with highest object level permission
|
data/app/models/lesli/account.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Lesli
|
4
4
|
|
5
|
-
Copyright (c)
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
6
6
|
|
7
7
|
This program is free software: you can redistribute it and/or modify
|
8
8
|
it under the terms of the GNU General Public License as published by
|
@@ -34,11 +34,10 @@ module Lesli
|
|
34
34
|
class Account < ApplicationLesliRecord
|
35
35
|
include AccountInitializer
|
36
36
|
|
37
|
-
|
38
37
|
# accounts always belongs to a user
|
39
38
|
belongs_to :user, optional: true
|
40
39
|
|
41
|
-
|
40
|
+
|
42
41
|
has_one :detail, inverse_of: :account, autosave: true, dependent: :destroy
|
43
42
|
accepts_nested_attributes_for :detail, update_only: true
|
44
43
|
|
@@ -46,43 +45,37 @@ module Lesli
|
|
46
45
|
# account resources
|
47
46
|
has_many :users
|
48
47
|
has_many :roles
|
49
|
-
has_many :
|
50
|
-
has_many :cronos
|
51
|
-
has_many :requests
|
48
|
+
has_many :journals
|
52
49
|
has_many :settings
|
53
50
|
has_many :locations
|
54
|
-
has_many :feedbacks
|
55
|
-
has_many :descriptors
|
56
|
-
has_many :activities
|
57
51
|
has_many :currencies
|
58
|
-
has_many :logs
|
59
52
|
|
60
53
|
|
54
|
+
# third-party engines associations
|
61
55
|
has_one :bell, class_name: "LesliBell::Account"
|
62
56
|
has_one :help, class_name: "LesliHelp::Account"
|
63
57
|
has_one :audit, class_name: "LesliAudit::Account"
|
64
58
|
has_one :admin, class_name: "LesliAdmin::Account"
|
65
59
|
has_one :guard, class_name: "LesliGuard::Account"
|
66
60
|
has_one :letter, class_name: "LesliLetter::Account"
|
61
|
+
has_one :papers, class_name: "LesliPapers::Account"
|
67
62
|
has_one :support, class_name: "LesliSupport::Account"
|
68
63
|
has_one :calendar, class_name: "LesliCalendar::Account"
|
69
64
|
has_one :dashboard, class_name: "LesliDashboard::Account"
|
70
65
|
|
71
66
|
|
72
67
|
# account statuses
|
73
|
-
enum status
|
74
|
-
:
|
75
|
-
:
|
76
|
-
:
|
77
|
-
:
|
78
|
-
|
68
|
+
enum :status, {
|
69
|
+
:active => 'active',
|
70
|
+
:suspended => 'suspended',
|
71
|
+
:registered => 'registered',
|
72
|
+
:onboarding => 'onboarding'
|
73
|
+
}
|
79
74
|
|
80
75
|
|
81
76
|
# company region (GDPR)
|
82
|
-
enum region
|
83
|
-
|
84
|
-
united_states: "united_states",
|
85
|
-
european_union: "european_union"
|
77
|
+
enum :region, {
|
78
|
+
america: "america"
|
86
79
|
}
|
87
80
|
|
88
81
|
|
@@ -1,8 +1,8 @@
|
|
1
|
-
|
1
|
+
=begin
|
2
2
|
|
3
3
|
Lesli
|
4
4
|
|
5
|
-
Copyright (c)
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
6
6
|
|
7
7
|
This program is free software: you can redistribute it and/or modify
|
8
8
|
it under the terms of the GNU General Public License as published by
|
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
|
|
19
19
|
|
20
20
|
Lesli · Ruby on Rails SaaS Development Framework.
|
21
21
|
|
22
|
-
Made with ♥ by
|
22
|
+
Made with ♥ by LesliTech
|
23
23
|
Building a better future, one line of code at a time.
|
24
24
|
|
25
25
|
@contact hello@lesli.tech
|
@@ -28,8 +28,11 @@ Building a better future, one line of code at a time.
|
|
28
28
|
|
29
29
|
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
30
30
|
// ·
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
=end
|
32
|
+
|
33
|
+
module Lesli
|
34
|
+
module Item
|
35
|
+
class Activity < ApplicationRecord
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -31,15 +31,17 @@ Building a better future, one line of code at a time.
|
|
31
31
|
=end
|
32
32
|
|
33
33
|
module Lesli
|
34
|
-
class Role::
|
34
|
+
class Role::Action < ApplicationLesliRecord
|
35
35
|
belongs_to :role
|
36
|
-
belongs_to :descriptor
|
37
36
|
|
38
37
|
after_commit :synchronize_privileges
|
39
|
-
|
38
|
+
after_destroy :synchronize_privileges
|
39
|
+
|
40
|
+
belongs_to :action, class_name: "SystemController::Action"
|
41
|
+
belongs_to :system_controller_action, class_name: "SystemController::Action", foreign_key: "action_id"
|
40
42
|
|
41
43
|
def synchronize_privileges
|
42
|
-
|
44
|
+
Lesli::RoleOperator.new(self).synchronize
|
43
45
|
end
|
44
46
|
|
45
47
|
def self.index current_user, query, role
|
data/app/models/lesli/role.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Lesli
|
4
4
|
|
5
|
-
Copyright (c)
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
6
6
|
|
7
7
|
This program is free software: you can redistribute it and/or modify
|
8
8
|
it under the terms of the GNU General Public License as published by
|
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
|
|
19
19
|
|
20
20
|
Lesli · Ruby on Rails SaaS Development Framework.
|
21
21
|
|
22
|
-
Made with ♥ by
|
22
|
+
Made with ♥ by LesliTech
|
23
23
|
Building a better future, one line of code at a time.
|
24
24
|
|
25
25
|
@contact hello@lesli.tech
|
@@ -35,26 +35,18 @@ module Lesli
|
|
35
35
|
belongs_to :account
|
36
36
|
|
37
37
|
# Role resources
|
38
|
-
has_many :activities
|
39
|
-
has_many :
|
40
|
-
has_many :
|
38
|
+
#has_many :activities
|
39
|
+
has_many :privileges, dependent: :delete_all
|
40
|
+
has_many :actions, dependent: :delete_all
|
41
|
+
|
41
42
|
|
42
43
|
# validations
|
43
44
|
validates :name, presence: :true
|
44
|
-
validates :
|
45
|
+
validates :permission_level, presence: :true
|
45
46
|
|
46
47
|
# initializers for new roles
|
47
48
|
after_create :after_create_role
|
48
49
|
|
49
|
-
# Return a list of roles that the user is able to work with
|
50
|
-
# according to object level permission
|
51
|
-
def self.list(current_user, query, params)
|
52
|
-
current_user.account.roles
|
53
|
-
.where("object_level_permission <= ?", current_user.max_object_level_permission)
|
54
|
-
.order(object_level_permission: :desc, name: :asc)
|
55
|
-
.select(:id, :name, :object_level_permission)
|
56
|
-
end
|
57
|
-
|
58
50
|
# @return [Boolean]
|
59
51
|
# @description Returns if a role is assigned to users.
|
60
52
|
def has_users?
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
module Lesli
|
3
|
+
module Shared
|
4
|
+
class Catalog < ActiveRecord::Base
|
5
|
+
self.abstract_class = true
|
6
|
+
|
7
|
+
before_save :create_catalog_key
|
8
|
+
|
9
|
+
def self.items_for(catalog, column = :name)
|
10
|
+
self.find_by(column => catalog)&.items || []
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def create_catalog_key
|
16
|
+
self.key = self.name.parameterize
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Lesli
|
4
4
|
|
5
|
-
Copyright (c)
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
6
6
|
|
7
7
|
This program is free software: you can redistribute it and/or modify
|
8
8
|
it under the terms of the GNU General Public License as published by
|
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
|
|
19
19
|
|
20
20
|
Lesli · Ruby on Rails SaaS Development Framework.
|
21
21
|
|
22
|
-
Made with ♥ by
|
22
|
+
Made with ♥ by LesliTech
|
23
23
|
Building a better future, one line of code at a time.
|
24
24
|
|
25
25
|
@contact hello@lesli.tech
|
@@ -31,7 +31,7 @@ Building a better future, one line of code at a time.
|
|
31
31
|
=end
|
32
32
|
|
33
33
|
module Lesli
|
34
|
-
class User::
|
34
|
+
class User::Journal < ApplicationRecord
|
35
35
|
belongs_to :user
|
36
36
|
belongs_to :user_session, optional: true
|
37
37
|
end
|
@@ -31,10 +31,9 @@ Building a better future, one line of code at a time.
|
|
31
31
|
=end
|
32
32
|
|
33
33
|
module Lesli
|
34
|
-
class User::
|
34
|
+
class User::Role < ApplicationLesliRecord
|
35
35
|
belongs_to :user
|
36
|
-
belongs_to :role
|
36
|
+
belongs_to :role, class_name: "Lesli::Role"
|
37
37
|
has_many :roles
|
38
|
-
#has_many :privileges, through: :roles
|
39
38
|
end
|
40
39
|
end
|
@@ -36,10 +36,9 @@ module Lesli
|
|
36
36
|
|
37
37
|
after_create :set_session_token
|
38
38
|
|
39
|
-
enum
|
40
|
-
|
41
|
-
devise_standard_session
|
42
|
-
cloud_shared_public: "cloud_shared_public",
|
39
|
+
enum session_source: {
|
40
|
+
:dispatcher_standard_session => "dispatcher_standard_session",
|
41
|
+
:devise_standard_session => "devise_standard_session"
|
43
42
|
}
|
44
43
|
|
45
44
|
def set_session_token
|