lesli_guard 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +38 -0
  3. data/app/assets/config/lesli_guard_manifest.js +38 -0
  4. data/app/assets/images/lesli_guard/guard-logo.svg +160 -0
  5. data/app/assets/javascripts/lesli_guard/application.js +4787 -0
  6. data/app/assets/stylesheets/lesli_guard/application.scss +33 -0
  7. data/app/assets/stylesheets/lesli_guard/dashboards.scss +32 -0
  8. data/app/assets/stylesheets/lesli_guard/descriptors.scss +32 -0
  9. data/app/assets/stylesheets/lesli_guard/roles.scss +32 -0
  10. data/app/assets/stylesheets/lesli_guard/system_controller.scss +32 -0
  11. data/app/assets/stylesheets/lesli_guard/users.scss +67 -0
  12. data/app/controllers/lesli_guard/accounts_controller.rb +60 -0
  13. data/app/controllers/lesli_guard/application_controller.rb +37 -0
  14. data/app/controllers/lesli_guard/dashboard/components_controller.rb +60 -0
  15. data/app/controllers/lesli_guard/dashboards_controller.rb +36 -0
  16. data/app/controllers/lesli_guard/descriptor/activities_controller.rb +122 -0
  17. data/app/controllers/lesli_guard/descriptor/privileges_controller.rb +112 -0
  18. data/app/controllers/lesli_guard/descriptors_controller.rb +129 -0
  19. data/app/controllers/lesli_guard/role/activities_controller.rb +76 -0
  20. data/app/controllers/lesli_guard/role/descriptors_controller.rb +97 -0
  21. data/app/controllers/lesli_guard/role/privileges_controller.rb +47 -0
  22. data/app/controllers/lesli_guard/roles_controller.rb +185 -0
  23. data/app/controllers/lesli_guard/user/roles_controller.rb +98 -0
  24. data/app/controllers/lesli_guard/user/sessions_controller.rb +71 -0
  25. data/app/controllers/lesli_guard/users_controller.rb +206 -0
  26. data/app/helpers/lesli_guard/accounts_helper.rb +4 -0
  27. data/app/helpers/lesli_guard/application_helper.rb +4 -0
  28. data/app/helpers/lesli_guard/dashboards_helper.rb +4 -0
  29. data/app/helpers/lesli_guard/descriptor/activities_helper.rb +4 -0
  30. data/app/helpers/lesli_guard/descriptor/privileges_helper.rb +4 -0
  31. data/app/helpers/lesli_guard/descriptors_helper.rb +4 -0
  32. data/app/helpers/lesli_guard/role/activities_helper.rb +4 -0
  33. data/app/helpers/lesli_guard/role/descriptors_helper.rb +4 -0
  34. data/app/helpers/lesli_guard/role/privileges_helper.rb +4 -0
  35. data/app/helpers/lesli_guard/roles_helper.rb +4 -0
  36. data/app/jobs/lesli_guard/application_job.rb +37 -0
  37. data/app/mailers/lesli_guard/application_mailer.rb +39 -0
  38. data/app/models/lesli_guard/account.rb +43 -0
  39. data/app/models/lesli_guard/application_record.rb +37 -0
  40. data/app/models/lesli_guard/dashboard/component.rb +42 -0
  41. data/app/models/lesli_guard/dashboard.rb +58 -0
  42. data/app/models/lesli_guard/descriptor/activity.rb +40 -0
  43. data/app/models/lesli_guard/descriptor/privilege.rb +40 -0
  44. data/app/models/lesli_guard/descriptor.rb +41 -0
  45. data/app/models/lesli_guard/role/activity.rb +40 -0
  46. data/app/services/lesli_guard/descriptor_privilege_service.rb +74 -0
  47. data/app/services/lesli_guard/descriptor_service.rb +152 -0
  48. data/app/services/lesli_guard/role_descriptor_service.rb +61 -0
  49. data/app/services/lesli_guard/role_service.rb +215 -0
  50. data/app/services/lesli_guard/user_service.rb +305 -0
  51. data/app/views/lesli_guard/accounts/_account.html.erb +2 -0
  52. data/app/views/lesli_guard/accounts/_form.html.erb +17 -0
  53. data/app/views/lesli_guard/accounts/edit.html.erb +10 -0
  54. data/app/views/lesli_guard/accounts/index.html.erb +14 -0
  55. data/app/views/lesli_guard/accounts/new.html.erb +9 -0
  56. data/app/views/lesli_guard/accounts/show.html.erb +10 -0
  57. data/app/views/lesli_guard/dashboards/show.html.erb +1 -0
  58. data/app/views/lesli_guard/descriptor/activities/_form.html.erb +32 -0
  59. data/app/views/lesli_guard/descriptor/activities/edit.html.erb +34 -0
  60. data/app/views/lesli_guard/descriptor/activities/index.html.erb +34 -0
  61. data/app/views/lesli_guard/descriptor/activities/new.html.erb +34 -0
  62. data/app/views/lesli_guard/descriptor/activities/show.html.erb +34 -0
  63. data/app/views/lesli_guard/descriptor/privileges/_form.html.erb +32 -0
  64. data/app/views/lesli_guard/descriptor/privileges/edit.html.erb +34 -0
  65. data/app/views/lesli_guard/descriptor/privileges/index.html.erb +34 -0
  66. data/app/views/lesli_guard/descriptor/privileges/new.html.erb +34 -0
  67. data/app/views/lesli_guard/descriptor/privileges/show.html.erb +34 -0
  68. data/app/views/lesli_guard/descriptors/_form.html.erb +32 -0
  69. data/app/views/lesli_guard/descriptors/edit.html.erb +34 -0
  70. data/app/views/lesli_guard/descriptors/index.html.erb +34 -0
  71. data/app/views/lesli_guard/descriptors/new.html.erb +34 -0
  72. data/app/views/lesli_guard/descriptors/show.html.erb +34 -0
  73. data/app/views/lesli_guard/partials/_engine-navigation.html.erb +38 -0
  74. data/app/views/lesli_guard/role/activities/_form.html.erb +32 -0
  75. data/app/views/lesli_guard/role/activities/edit.html.erb +34 -0
  76. data/app/views/lesli_guard/role/activities/index.html.erb +34 -0
  77. data/app/views/lesli_guard/role/activities/new.html.erb +34 -0
  78. data/app/views/lesli_guard/role/activities/show.html.erb +34 -0
  79. data/app/views/lesli_guard/role/descriptors/_form.html.erb +32 -0
  80. data/app/views/lesli_guard/role/descriptors/edit.html.erb +34 -0
  81. data/app/views/lesli_guard/role/descriptors/index.html.erb +34 -0
  82. data/app/views/lesli_guard/role/descriptors/new.html.erb +34 -0
  83. data/app/views/lesli_guard/role/descriptors/show.html.erb +34 -0
  84. data/app/views/lesli_guard/role/privileges/_form.html.erb +32 -0
  85. data/app/views/lesli_guard/role/privileges/edit.html.erb +34 -0
  86. data/app/views/lesli_guard/role/privileges/index.html.erb +34 -0
  87. data/app/views/lesli_guard/role/privileges/new.html.erb +34 -0
  88. data/app/views/lesli_guard/role/privileges/show.html.erb +34 -0
  89. data/app/views/lesli_guard/roles/edit.html.erb +34 -0
  90. data/app/views/lesli_guard/roles/index.html.erb +34 -0
  91. data/app/views/lesli_guard/roles/new.html.erb +34 -0
  92. data/app/views/lesli_guard/roles/show.html.erb +34 -0
  93. data/app/views/lesli_guard/users/edit.html.erb +10 -0
  94. data/app/views/lesli_guard/users/index.html.erb +34 -0
  95. data/app/views/lesli_guard/users/new.html.erb +34 -0
  96. data/app/views/lesli_guard/users/show.html.erb +1 -0
  97. data/config/locales/translations.en.yml +43 -0
  98. data/config/locales/translations.es.yml +43 -0
  99. data/config/routes.rb +90 -0
  100. data/db/migrate/v1/0801000110_create_lesli_guard_accounts.rb +42 -0
  101. data/db/migrate/v1/0801050110_create_lesli_guard_dashboards.rb +51 -0
  102. data/db/migrate/v1/0801050210_create_lesli_guard_dashboard_components.rb +53 -0
  103. data/lib/lesli_guard/engine.rb +18 -0
  104. data/lib/lesli_guard/version.rb +4 -0
  105. data/lib/lesli_guard.rb +6 -0
  106. data/lib/tasks/lesli_guard_tasks.rake +50 -0
  107. data/lib/vue/application.js +112 -0
  108. data/lib/vue/apps/descriptors/components/form.vue +136 -0
  109. data/lib/vue/apps/descriptors/edit.vue +83 -0
  110. data/lib/vue/apps/descriptors/index.vue +113 -0
  111. data/lib/vue/apps/descriptors/new.vue +69 -0
  112. data/lib/vue/apps/descriptors/show.vue +233 -0
  113. data/lib/vue/apps/roles/components/descriptors.vue +81 -0
  114. data/lib/vue/apps/roles/components/form.vue +253 -0
  115. data/lib/vue/apps/roles/components/privilegeCustom.vue +86 -0
  116. data/lib/vue/apps/roles/components/privilegeStandard.vue +196 -0
  117. data/lib/vue/apps/roles/edit.vue +118 -0
  118. data/lib/vue/apps/roles/index.vue +168 -0
  119. data/lib/vue/apps/roles/logs.vue +110 -0
  120. data/lib/vue/apps/roles/new.vue +86 -0
  121. data/lib/vue/apps/roles/show.vue +109 -0
  122. data/lib/vue/apps/users/components/information-card.vue +107 -0
  123. data/lib/vue/apps/users/components/information-form.vue +176 -0
  124. data/lib/vue/apps/users/components/integrations-information.vue +61 -0
  125. data/lib/vue/apps/users/components/management-roles.vue +107 -0
  126. data/lib/vue/apps/users/components/management-security.vue +113 -0
  127. data/lib/vue/apps/users/components/management-sessions.vue +101 -0
  128. data/lib/vue/apps/users/components/management-settings.vue +93 -0
  129. data/lib/vue/apps/users/index.vue +207 -0
  130. data/lib/vue/apps/users/new.vue +181 -0
  131. data/lib/vue/apps/users/show.vue +131 -0
  132. data/lib/vue/stores/descriptor.js +117 -0
  133. data/lib/vue/stores/descriptors.js +156 -0
  134. data/lib/vue/stores/role.js +203 -0
  135. data/lib/vue/stores/roles.js +58 -0
  136. data/lib/vue/stores/translations.json +98 -0
  137. data/lib/vue/stores/user.js +331 -0
  138. data/lib/vue/stores/users.js +176 -0
  139. data/license +674 -0
  140. data/readme.md +76 -0
  141. metadata +199 -0
@@ -0,0 +1,109 @@
1
+ <script setup>
2
+ /*
3
+
4
+ Lesli
5
+
6
+ Copyright (c) 2023, Lesli Technologies, S. A.
7
+
8
+ This program is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU General Public License as published by
10
+ the Free Software Foundation, either version 3 of the License, or
11
+ (at your option) any later version.
12
+
13
+ This program is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU General Public License for more details.
17
+
18
+ You should have received a copy of the GNU General Public License
19
+ along with this program. If not, see http://www.gnu.org/licenses/.
20
+
21
+ Lesli · Your Smart Business Assistant.
22
+
23
+ Made with ♥ by https://www.lesli.tech
24
+ Building a better future, one line of code at a time.
25
+
26
+ @contact hello@lesli.tech
27
+ @website https://lesli.tech
28
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
+
30
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
+ // ·
32
+
33
+ */
34
+
35
+
36
+
37
+ // · import vue tools
38
+ import { ref, reactive, onMounted, watch, computed, inject } from "vue"
39
+ import { useRouter, useRoute } from 'vue-router'
40
+
41
+
42
+ // · import lesli stores
43
+ import { useRole } from "../../stores/role"
44
+ import { useDescriptor } from "../../stores/descriptor"
45
+
46
+
47
+ // · import components
48
+ import componentFormRole from "./components/form.vue"
49
+ import componentPrivilegeCustom from "./components/privilegeCustom.vue"
50
+ import componentPrivilegeStandard from "./components/privilegeStandard.vue"
51
+
52
+
53
+ // · initialize/inject plugins
54
+ const router = useRouter()
55
+ const route = useRoute()
56
+ const msg = inject("msg")
57
+ const url = inject("url")
58
+
59
+
60
+ // ·
61
+ const storeRole = useRole()
62
+ const storeDescriptor = useDescriptor()
63
+
64
+
65
+ // ·
66
+ const editor = ref('standard')
67
+
68
+
69
+ // · defining props
70
+ const props = defineProps({
71
+ appMountPath: {
72
+ type: String,
73
+ required: false,
74
+ default: "guard/roles",
75
+ }
76
+ })
77
+
78
+
79
+ // ·
80
+ onMounted(() => {
81
+ storeRole.$reset()
82
+ storeRole.getRole(route.params.id)
83
+ })
84
+
85
+
86
+ // ·
87
+ function toggleEditor() {
88
+
89
+ if (editor.value == 'standard') {
90
+ return editor.value = 'custom'
91
+ }
92
+
93
+ editor.value = 'standard'
94
+ }
95
+
96
+ </script>
97
+ <template>
98
+ <lesli-application-container>
99
+ <lesli-header :title="storeRole.role.name + ' role'">
100
+ <lesli-button icon="list" :to="url.guard('roles')">
101
+ All roles
102
+ </lesli-button>
103
+ <lesli-link main warning icon="edit" :to="url.guard('roles/:id/edit', route.params.id)">
104
+ Edit role
105
+ </lesli-link>
106
+ </lesli-header>
107
+ <componentFormRole :editable="false"></componentFormRole>
108
+ </lesli-application-container>
109
+ </template>
@@ -0,0 +1,107 @@
1
+ <script setup>
2
+ /*
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
+
22
+ Made with ♥ by https://www.lesli.tech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ */
32
+
33
+
34
+ // · import lesli stores
35
+ import { useUser } from "LesliGuard/stores/user"
36
+
37
+
38
+ // · implement stores
39
+ const storeUser = useUser()
40
+
41
+
42
+ // · translations
43
+ const translations = {
44
+ guard: {
45
+ users: i18n.t("lesli_guard.users")
46
+ }
47
+ }
48
+
49
+ </script>
50
+ <template>
51
+ <div class="user-information-card mb-5">
52
+ <div class="media is-align-items-center">
53
+ <div class="media-left">
54
+ <figure class="image is-128x128">
55
+ <span class="alternative-avatar">
56
+ {{ storeUser.initials }}
57
+ </span>
58
+ </figure>
59
+ </div>
60
+
61
+ <div class="media-content">
62
+ <div class="content mb-0">
63
+ <h5 class="title is-5 mb-0">
64
+ {{ storeUser.user.first_name }}
65
+ {{ storeUser.user.last_name }}
66
+ </h5>
67
+ <p>{{ storeUser.user.detail_attributes.title }}</p>
68
+ </div>
69
+
70
+ <div class="level is-mobile">
71
+ <div class="level-left">
72
+ <a class="level-item mr-4"
73
+ v-if="storeUser.user.email"
74
+ :href="'mailto:'+storeUser.user.email">
75
+ <span class="icon is-small mr-2">
76
+ <span class="material-icons">
77
+ email
78
+ </span>
79
+ </span>
80
+ {{ storeUser.user.email }}
81
+ </a>
82
+ <a class="level-item mr-4"
83
+ v-if="storeUser.user.telephone"
84
+ :href="'tel:'+storeUser.user.telephone">
85
+ <span class="icon is-small mr-2">
86
+ <span class="material-icons">
87
+ phone
88
+ </span>
89
+ </span>
90
+ {{ storeUser.user.telephone }}
91
+ </a>
92
+
93
+ <!-- Show the max role -->
94
+ <p class="level-item" v-if="storeUser.role_names">
95
+ <span class="icon is-small mr-2">
96
+ <span class="material-icons">
97
+ security
98
+ </span>
99
+ </span>
100
+ {{ storeUser.role_names }}
101
+ </p>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ </div>
107
+ </template>
@@ -0,0 +1,176 @@
1
+ <script setup>
2
+ /*
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
+
22
+ Made with ♥ by https://www.lesli.tech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ */
32
+
33
+
34
+ // · import vue tools
35
+ import { onMounted, inject } from "vue"
36
+
37
+
38
+ // · import lesli stores
39
+ import { useUser } from "LesliGuard/stores/user"
40
+
41
+
42
+ // · import vue router composable
43
+ import { useRouter, useRoute } from "vue-router"
44
+
45
+
46
+ // · implement stores
47
+ const storeUser = useUser()
48
+
49
+
50
+ // · initialize/inject plugins
51
+ const router = useRouter()
52
+ const route = useRoute()
53
+ const url = inject("url")
54
+
55
+
56
+ // ·
57
+ const translations = {
58
+ guard: {
59
+ users: i18n.t("lesli_guard.users")
60
+ },
61
+ lesli: {
62
+ shared: i18n.t("lesli.shared")
63
+ },
64
+ users: I18n.t("core.users"),
65
+ shared: I18n.t("core.shared")
66
+ }
67
+
68
+ </script>
69
+ <template>
70
+ <lesli-form flat @submit="storeUser.putUser()">
71
+
72
+ <div class="field is-horizontal">
73
+ <div class="field-label is-normal">
74
+ <label class="label">
75
+ {{ translations.guard.users.column_email }}
76
+ <span class="is-danger">*</span>
77
+ </label>
78
+ </div>
79
+ <div class="field-body">
80
+ <div class="field">
81
+ <div class="control">
82
+ <input name="user_email" v-model="storeUser.user.email" required="required" type="email" class="input">
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>
87
+
88
+ <div class="field is-horizontal">
89
+ <div class="field-label is-normal">
90
+ <label class="label">
91
+ {{ translations.guard.users.column_first_name }}
92
+ </label>
93
+ </div>
94
+ <div class="field-body">
95
+ <div class="field">
96
+ <div class="control">
97
+ <input name="first_name" v-model="storeUser.user.first_name" type="text" class="input">
98
+ </div>
99
+ </div>
100
+ </div>
101
+ </div>
102
+
103
+ <div class="field is-horizontal">
104
+ <div class="field-label is-normal">
105
+ <label class="label">
106
+ {{ translations.guard.users.column_last_name }}
107
+ </label>
108
+ </div>
109
+ <div class="field-body">
110
+ <div class="field">
111
+ <div class="control">
112
+ <input name="last_name" v-model="storeUser.user.last_name" class="input">
113
+ </div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+
118
+ <div class="field is-horizontal">
119
+ <div class="field-label is-normal">
120
+ <label class="label">
121
+ {{ translations.guard.users.column_alias }}
122
+ </label>
123
+ </div>
124
+ <div class="field-body">
125
+ <div class="field">
126
+ <div class="control">
127
+ <input name="user_alias" v-model="storeUser.user.alias" class="input">
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+
133
+ <div class="field is-horizontal">
134
+ <div class="field-label is-normal">
135
+ <label class="label">
136
+ {{ translations.guard.users.column_telephone }}
137
+ </label>
138
+ </div>
139
+ <div class="field-body">
140
+ <div class="field">
141
+ <div class="control">
142
+ <input name="user_number" v-model="storeUser.user.telephone" class="input">
143
+ </div>
144
+ </div>
145
+ </div>
146
+ </div>
147
+
148
+ <div class="field is-horizontal">
149
+ <div class="field-label is-normal">
150
+ <label class="label">
151
+ {{ translations.guard.users.column_title }}
152
+ </label>
153
+ </div>
154
+ <div class="field-body">
155
+ <div class="field">
156
+ <div class="control">
157
+ <input name="user_title" v-model="storeUser.user.detail_attributes.title" class="input">
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </div>
162
+ <div class="field is-horizontal">
163
+ <div class="field-label is-normal">
164
+ </div>
165
+ <div class="field-body">
166
+ <div class="field">
167
+ <div class="control">
168
+ <lesli-button icon="save">
169
+ {{ translations.lesli.shared.button_save }}
170
+ </lesli-button>
171
+ </div>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ </lesli-form>
176
+ </template>
@@ -0,0 +1,61 @@
1
+ <script setup>
2
+ /*
3
+
4
+ Lesli
5
+
6
+ Copyright (c) 2023, Lesli Technologies, S. A.
7
+
8
+ This program is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU General Public License as published by
10
+ the Free Software Foundation, either version 3 of the License, or
11
+ (at your option) any later version.
12
+
13
+ This program is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU General Public License for more details.
17
+
18
+ You should have received a copy of the GNU General Public License
19
+ along with this program. If not, see http://www.gnu.org/licenses/.
20
+
21
+ Lesli · Your Smart Business Assistant.
22
+
23
+ Made with ♥ by https://www.lesli.tech
24
+ Building a better future, one line of code at a time.
25
+
26
+ @contact hello@lesli.tech
27
+ @website https://lesli.tech
28
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
+
30
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
+ // ·
32
+
33
+ */
34
+
35
+
36
+ import { useProfile } from "Lesli/shared/stores/profile"
37
+
38
+ const storeProfile = useProfile()
39
+
40
+ const translations = {
41
+ core: {
42
+ roles: I18n.t("core.roles"),
43
+ users: I18n.t("core.users"),
44
+ shared: I18n.t("core.shared")
45
+ }
46
+ }
47
+ </script>
48
+ <template>
49
+ <section class="application-component">
50
+ <div class="field is-horizontal">
51
+ <div class="field-label is-normal">
52
+ <label class="label">Google account</label>
53
+ </div>
54
+ <div class="field-body">
55
+ <lesli-button icon="google">
56
+ <a href="/auth/google_oauth2">Connect</a>
57
+ </lesli-button>
58
+ </div>
59
+ </div>
60
+ </section>
61
+ </template>
@@ -0,0 +1,107 @@
1
+ <script setup>
2
+ /*
3
+
4
+ Lesli
5
+
6
+ Copyright (c) 2023, Lesli Technologies, S. A.
7
+
8
+ This program is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU General Public License as published by
10
+ the Free Software Foundation, either version 3 of the License, or
11
+ (at your option) any later version.
12
+
13
+ This program is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU General Public License for more details.
17
+
18
+ You should have received a copy of the GNU General Public License
19
+ along with this program. If not, see http://www.gnu.org/licenses/.
20
+
21
+ Lesli · Ruby on Rails SaaS Development Framework.
22
+
23
+ Made with ♥ by https://www.lesli.tech
24
+ Building a better future, one line of code at a time.
25
+
26
+ @contact hello@lesli.tech
27
+ @website https://www.lesli.tech
28
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
+
30
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
+ // ·
32
+ */
33
+
34
+
35
+
36
+ // · import vue tools
37
+ import { ref, reactive, onMounted, watch, computed } from "vue"
38
+
39
+
40
+ // · import lesli stores
41
+ import { useUser } from "LesliGuard/stores/user"
42
+ import { useRoles } from "LesliGuard/stores/roles"
43
+
44
+
45
+ // · implement stores
46
+ const storeUser = useUser()
47
+ const storeRoles = useRoles()
48
+
49
+
50
+ // ·
51
+ const translations = {
52
+ shared: I18n.t("core.shared"),
53
+ passwords: I18n.t("core.users/passwords"),
54
+ users: I18n.t("core.users")
55
+ }
56
+
57
+
58
+ // ·
59
+ function updateRole(role){
60
+ if (role.active) {
61
+ storeUser.postRole(role)
62
+ } else {
63
+ storeUser.deleteRole(role)
64
+ }
65
+ }
66
+
67
+
68
+ // ·
69
+ onMounted(() => {
70
+ storeUser.getRoles()
71
+ })
72
+ </script>
73
+ <template>
74
+ <div class="media px-6" v-for="role in storeUser.roles">
75
+ <div class="media-content pt-4">
76
+ <h4>{{ role.name }}</h4>
77
+ <p style="color:#aaa;">
78
+ {{ role.description }}
79
+ </p>
80
+ </div>
81
+ <div class="media-right pt-4">
82
+ <lesli-toggle v-model="role.active" @change="updateRole(role)">
83
+ </lesli-toggle>
84
+ </div>
85
+ </div>
86
+ <lesli-empty v-if="storeUser.roles.length == 0"></lesli-empty>
87
+ <!--
88
+ <div class="roles-types">
89
+ <div
90
+ class="card roles-types-item p-4 is-flex is-flex-direction-column is-justify-content-space-between is-clickable"
91
+ v-for="role in storeUser.options.roles"
92
+ :key="role">
93
+ <div class="role-type-title">
94
+ <span class="has-text-weight-semibold is-size-5 ">
95
+ {{ role.name }}
96
+ </span>
97
+ </div>
98
+ <div>
99
+ <span>Permission level: {{ role.object_level_permission }} </span>
100
+ </div>
101
+ <div class="is-flex is-justify-content-space-between is-align-items-center">
102
+ <lesli-toggle v-model="storeUser.rolesToggle[role.id]" v-on:update:modelValue="updateRole(role,storeUser.rolesToggle[role.id])" ></lesli-toggle>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ -->
107
+ </template>
@@ -0,0 +1,113 @@
1
+ <script setup>
2
+ /*
3
+
4
+ Lesli
5
+
6
+ Copyright (c) 2023, Lesli Technologies, S. A.
7
+
8
+ This program is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU General Public License as published by
10
+ the Free Software Foundation, either version 3 of the License, or
11
+ (at your option) any later version.
12
+
13
+ This program is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU General Public License for more details.
17
+
18
+ You should have received a copy of the GNU General Public License
19
+ along with this program. If not, see http://www.gnu.org/licenses/.
20
+
21
+ Lesli · Ruby on Rails SaaS Development Framework.
22
+
23
+ Made with ♥ by https://www.lesli.tech
24
+ Building a better future, one line of code at a time.
25
+
26
+ @contact hello@lesli.tech
27
+ @website https://www.lesli.tech
28
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
+
30
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
+ // ·
32
+ */
33
+
34
+
35
+
36
+ // · import lesli stores
37
+ import { useUser } from "LesliGuard/stores/user"
38
+
39
+
40
+ // · implement stores
41
+ const storeUser = useUser()
42
+
43
+
44
+ // · translations
45
+ const translations = {
46
+ users: I18n.t("core.users"),
47
+ shared: I18n.t("core.shared")
48
+ }
49
+
50
+
51
+ </script>
52
+ <template>
53
+ <div>
54
+ <fieldset class="mb-4">
55
+ <legend>Force the user to change the password</legend>
56
+ <lesli-button
57
+ icon="lock_reset"
58
+ @click="storeUser.doRequestPassword">
59
+ {{ translations.users.view_btn_request_password || "Request password" }}
60
+ </lesli-button>
61
+ </fieldset>
62
+
63
+ <fieldset class="mb-4">
64
+ <legend>Generate a new password for the user</legend>
65
+ <lesli-button
66
+ icon="key"
67
+ @click="storeUser.doPasswordReset">
68
+ {{ translations.users.view_btn_password_reset || "Password reset" }}
69
+ </lesli-button>
70
+ </fieldset>
71
+
72
+ <fieldset class="mb-4">
73
+ <legend>Close all the active sessions of the user</legend>
74
+ <lesli-button
75
+ icon="logout"
76
+ @click="storeUser.doLogout">
77
+ {{ translations.users.view_btn_logout }}
78
+ </lesli-button>
79
+ </fieldset>
80
+
81
+ <fieldset class="mb-4">
82
+ <legend>Remove all user access</legend>
83
+ <lesli-button
84
+ danger
85
+ icon="lock_outline"
86
+ @click="storeUser.doRevokeAccess">
87
+ {{ translations.users.view_btn_revoke_access }}
88
+ </lesli-button>
89
+ </fieldset>
90
+
91
+ <br><br>
92
+
93
+ <fieldset class="mb-4">
94
+ <legend>Delete user forever</legend>
95
+ <lesli-button
96
+ danger
97
+ icon="delete_forever"
98
+ @click="storeUser.deleteUser">
99
+ {{ translations.users.view_btn_delete_user }}
100
+ </lesli-button>
101
+ </fieldset>
102
+ </div>
103
+ </template>
104
+ <style scoped>
105
+ fieldset {
106
+ padding: 1.6rem;
107
+ border: 1px solid #ccc;
108
+ border-radius: 4px;
109
+ }
110
+ legend {
111
+ color: #555;
112
+ }
113
+ </style>