@ozdao/prometheus-framework 0.2.125 → 0.2.127

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. package/dist/auth.server.js +61 -2
  2. package/dist/auth.server.mjs +61 -2
  3. package/dist/gallery.server.js +55 -3
  4. package/dist/gallery.server.mjs +55 -3
  5. package/dist/main-Ba3zK8PO.js +92 -0
  6. package/dist/main-Btlny-89.mjs +14207 -0
  7. package/dist/main-CF35oB7q.js +92 -0
  8. package/dist/main-CmL_j3wv.mjs +14223 -0
  9. package/dist/organizations.server.js +112 -184
  10. package/dist/organizations.server.mjs +112 -184
  11. package/dist/prometheus-framework/src/components/Block/Block.vue.cjs +1 -1
  12. package/dist/prometheus-framework/src/components/Block/Block.vue.js +1 -1
  13. package/dist/prometheus-framework/src/components/Button/Button.vue.cjs +1 -1
  14. package/dist/prometheus-framework/src/components/Button/Button.vue.js +1 -94
  15. package/dist/prometheus-framework/src/components/Button/Button.vue2.cjs +1 -1
  16. package/dist/prometheus-framework/src/components/Button/Button.vue2.js +94 -1
  17. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue.cjs +1 -1
  18. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue.js +58 -1
  19. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue2.cjs +1 -1
  20. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue2.js +1 -58
  21. package/dist/prometheus-framework/src/components/Feed/Feed.vue.cjs +1 -1
  22. package/dist/prometheus-framework/src/components/Feed/Feed.vue.js +67 -68
  23. package/dist/prometheus-framework/src/components/Field/Field.vue.cjs +1 -1
  24. package/dist/prometheus-framework/src/components/Field/Field.vue.js +1 -84
  25. package/dist/prometheus-framework/src/components/Field/Field.vue2.cjs +1 -1
  26. package/dist/prometheus-framework/src/components/Field/Field.vue2.js +84 -1
  27. package/dist/prometheus-framework/src/components/FieldBig/FieldBig.vue.cjs +1 -1
  28. package/dist/prometheus-framework/src/components/FieldBig/FieldBig.vue.js +1 -1
  29. package/dist/prometheus-framework/src/components/Popup/Popup.vue.cjs +1 -1
  30. package/dist/prometheus-framework/src/components/Popup/Popup.vue.js +1 -77
  31. package/dist/prometheus-framework/src/components/Popup/Popup.vue2.cjs +1 -1
  32. package/dist/prometheus-framework/src/components/Popup/Popup.vue2.js +77 -1
  33. package/dist/prometheus-framework/src/components/Select/Select.vue.cjs +1 -1
  34. package/dist/prometheus-framework/src/components/Select/Select.vue.js +1 -103
  35. package/dist/prometheus-framework/src/components/Select/Select.vue2.cjs +1 -1
  36. package/dist/prometheus-framework/src/components/Select/Select.vue2.js +103 -1
  37. package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue.cjs +1 -1
  38. package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue.js +1 -36
  39. package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue2.cjs +1 -1
  40. package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue2.js +36 -1
  41. package/dist/prometheus-framework/src/components/Tooltip/Tooltip.vue.cjs +1 -1
  42. package/dist/prometheus-framework/src/components/Tooltip/Tooltip.vue.js +1 -45
  43. package/dist/prometheus-framework/src/components/Tooltip/Tooltip.vue2.cjs +1 -1
  44. package/dist/prometheus-framework/src/components/Tooltip/Tooltip.vue2.js +45 -1
  45. package/dist/prometheus-framework/src/modules/auth/components/layouts/Auth.vue.cjs +1 -1
  46. package/dist/prometheus-framework/src/modules/auth/components/layouts/Auth.vue.js +2 -2
  47. package/dist/prometheus-framework/src/modules/auth/components/pages/EnterCode.vue.cjs +1 -1
  48. package/dist/prometheus-framework/src/modules/auth/components/pages/EnterCode.vue.js +1 -1
  49. package/dist/prometheus-framework/src/modules/auth/components/pages/EnterPassword.vue.cjs +1 -1
  50. package/dist/prometheus-framework/src/modules/auth/components/pages/EnterPassword.vue.js +2 -2
  51. package/dist/prometheus-framework/src/modules/auth/components/pages/Invite.vue.cjs +1 -1
  52. package/dist/prometheus-framework/src/modules/auth/components/pages/Invite.vue.js +2 -2
  53. package/dist/prometheus-framework/src/modules/auth/components/pages/ResetPassword.vue.cjs +1 -1
  54. package/dist/prometheus-framework/src/modules/auth/components/pages/ResetPassword.vue.js +2 -2
  55. package/dist/prometheus-framework/src/modules/auth/components/pages/SignIn.vue.cjs +1 -1
  56. package/dist/prometheus-framework/src/modules/auth/components/pages/SignIn.vue.js +2 -2
  57. package/dist/prometheus-framework/src/modules/auth/components/pages/SignUp.vue.cjs +1 -1
  58. package/dist/prometheus-framework/src/modules/auth/components/pages/SignUp.vue.js +2 -2
  59. package/dist/prometheus-framework/src/modules/auth/store/auth.cjs +1 -1
  60. package/dist/prometheus-framework/src/modules/auth/store/auth.js +57 -50
  61. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.cjs +1 -1
  62. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.js +68 -62
  63. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.cjs +1 -1
  64. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.js +1 -1
  65. package/dist/prometheus-framework/src/modules/community/components/pages/Community.vue.cjs +1 -1
  66. package/dist/prometheus-framework/src/modules/community/components/pages/Community.vue.js +3 -3
  67. package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  68. package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.js +4 -4
  69. package/dist/prometheus-framework/src/modules/community/components/sections/HotPosts.vue.cjs +1 -1
  70. package/dist/prometheus-framework/src/modules/community/components/sections/HotPosts.vue.js +2 -2
  71. package/dist/prometheus-framework/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
  72. package/dist/prometheus-framework/src/modules/constructor/components/elements/Embed.vue.js +1 -1
  73. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.cjs +1 -5
  74. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.js +0 -66
  75. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue2.cjs +5 -1
  76. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue2.js +66 -0
  77. package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.cjs +1 -1
  78. package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.js +1 -1
  79. package/dist/prometheus-framework/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
  80. package/dist/prometheus-framework/src/modules/events/components/elements/ButtonCheck.vue.js +2 -2
  81. package/dist/prometheus-framework/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
  82. package/dist/prometheus-framework/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  83. package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  84. package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.js +4 -4
  85. package/dist/prometheus-framework/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  86. package/dist/prometheus-framework/src/modules/events/components/pages/EditEventTickets.vue.js +3 -3
  87. package/dist/prometheus-framework/src/modules/gallery/components/pages/Gallery.vue.cjs +1 -1
  88. package/dist/prometheus-framework/src/modules/gallery/components/pages/Gallery.vue.js +1 -1
  89. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  90. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.js +4 -4
  91. package/dist/prometheus-framework/src/modules/gallery/gallery.client.cjs +1 -1
  92. package/dist/prometheus-framework/src/modules/gallery/gallery.client.js +4 -4
  93. package/dist/prometheus-framework/src/modules/globals/components/blocks/BlockSearch.vue.cjs +1 -1
  94. package/dist/prometheus-framework/src/modules/globals/components/blocks/BlockSearch.vue.js +1 -1
  95. package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.cjs +1 -1
  96. package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.js +3 -3
  97. package/dist/prometheus-framework/src/modules/landing/components/sections/SectionGuide.vue.cjs +1 -1
  98. package/dist/prometheus-framework/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
  99. package/dist/prometheus-framework/src/modules/legal/components/pages/Legal.vue.cjs +1 -1
  100. package/dist/prometheus-framework/src/modules/legal/components/pages/Legal.vue.js +2 -2
  101. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  102. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  103. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
  104. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +4 -4
  105. package/dist/prometheus-framework/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -1
  106. package/dist/prometheus-framework/src/modules/orders/components/sections/FormAddCustomer.vue.js +3 -3
  107. package/dist/prometheus-framework/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +1 -1
  108. package/dist/prometheus-framework/src/modules/orders/components/sections/FormCustomerDetails.vue.js +2 -2
  109. package/dist/prometheus-framework/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
  110. package/dist/prometheus-framework/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
  111. package/dist/prometheus-framework/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
  112. package/dist/prometheus-framework/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  113. package/dist/prometheus-framework/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +1 -1
  114. package/dist/prometheus-framework/src/modules/organizations/components/blocks/CardDepartment.vue.js +15 -15
  115. package/dist/prometheus-framework/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
  116. package/dist/prometheus-framework/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  117. package/dist/prometheus-framework/src/modules/organizations/components/pages/Department.vue.cjs +1 -1
  118. package/dist/prometheus-framework/src/modules/organizations/components/pages/Department.vue.js +1 -1
  119. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  120. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.js +117 -95
  121. package/dist/prometheus-framework/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
  122. package/dist/prometheus-framework/src/modules/organizations/components/pages/Members.vue.js +3 -3
  123. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  124. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.js +4 -4
  125. package/dist/prometheus-framework/src/modules/organizations/components/sections/DetailsTab.vue.cjs +1 -1
  126. package/dist/prometheus-framework/src/modules/organizations/components/sections/DetailsTab.vue.js +1 -1
  127. package/dist/prometheus-framework/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  128. package/dist/prometheus-framework/src/modules/organizations/components/sections/Documents.vue.js +3 -3
  129. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  130. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.js +3 -3
  131. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  132. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.js +5 -5
  133. package/dist/prometheus-framework/src/modules/organizations/store/departments.cjs +1 -1
  134. package/dist/prometheus-framework/src/modules/organizations/store/departments.js +9 -4
  135. package/dist/prometheus-framework/src/modules/products/components/blocks/CardPosition.vue.cjs +1 -1
  136. package/dist/prometheus-framework/src/modules/products/components/blocks/CardPosition.vue.js +2 -2
  137. package/dist/prometheus-framework/src/modules/products/components/blocks/ImagesThumbnails.vue.cjs +1 -1
  138. package/dist/prometheus-framework/src/modules/products/components/blocks/ImagesThumbnails.vue.js +1 -1
  139. package/dist/prometheus-framework/src/modules/products/components/blocks/LeftoverPositions.vue.cjs +1 -1
  140. package/dist/prometheus-framework/src/modules/products/components/blocks/LeftoverPositions.vue.js +1 -1
  141. package/dist/prometheus-framework/src/modules/products/components/blocks/ListPositions.vue.cjs +1 -1
  142. package/dist/prometheus-framework/src/modules/products/components/blocks/ListPositions.vue.js +1 -1
  143. package/dist/prometheus-framework/src/modules/products/components/pages/Categories.vue.cjs +1 -1
  144. package/dist/prometheus-framework/src/modules/products/components/pages/Categories.vue.js +1 -1
  145. package/dist/prometheus-framework/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
  146. package/dist/prometheus-framework/src/modules/products/components/pages/CategoryEdit.vue.js +3 -3
  147. package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.cjs +1 -1
  148. package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.js +3 -3
  149. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  150. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.js +3 -3
  151. package/dist/prometheus-framework/src/modules/products/components/sections/EditModifications.vue.cjs +1 -1
  152. package/dist/prometheus-framework/src/modules/products/components/sections/EditModifications.vue.js +1 -1
  153. package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.cjs +1 -1
  154. package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.js +3 -3
  155. package/dist/prometheus-framework/src/modules/products/components/sections/FilterProducts.vue.cjs +1 -1
  156. package/dist/prometheus-framework/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  157. package/dist/prometheus-framework/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
  158. package/dist/prometheus-framework/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  159. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  160. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.js +3 -3
  161. package/dist/prometheus-framework/src/modules/users/components/pages/Profile.vue.cjs +1 -1
  162. package/dist/prometheus-framework/src/modules/users/components/pages/Profile.vue.js +3 -3
  163. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEdit.vue.cjs +1 -1
  164. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEdit.vue.js +2 -2
  165. package/dist/prometheus-framework/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
  166. package/dist/prometheus-framework/src/modules/wallet/views/components/pages/Wallet.vue.js +5 -5
  167. package/dist/prometheus-framework.cjs.js +1 -1
  168. package/dist/prometheus-framework.es.js +1 -1
  169. package/dist/style.css +1 -1
  170. package/dist/web-BDaOF322.js +1 -0
  171. package/dist/web-CvRd3N_J.mjs +54 -0
  172. package/dist/web-DEysqj0n.js +1 -0
  173. package/dist/web-DtWmpLE-.mjs +54 -0
  174. package/package.json +1 -1
  175. package/src/components/Feed/Feed.vue +5 -1
  176. package/src/modules/auth/controllers/auth.controller.js +68 -2
  177. package/src/modules/auth/routes/auth.routes.js +8 -1
  178. package/src/modules/auth/store/auth.js +21 -9
  179. package/src/modules/backoffice/components/pages/Dashboard.vue +6 -0
  180. package/src/modules/gallery/gallery.client.js +1 -1
  181. package/src/modules/gallery/routes/gallery.routes.js +7 -3
  182. package/src/modules/globals/mixins/mixins.js +17 -0
  183. package/src/modules/marketplace/components/pages/Catalog.vue +1 -1
  184. package/src/modules/middlewares/server/verifyAccesses.js +100 -23
  185. package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -1
  186. package/src/modules/organizations/components/pages/DepartmentEdit.vue +24 -2
  187. package/src/modules/organizations/components/pages/Members.vue +1 -1
  188. package/src/modules/organizations/models/department.model.js +42 -2
  189. package/src/modules/organizations/routes/departments.routes.js +1 -8
  190. package/src/modules/organizations/store/departments.js +5 -0
@@ -227,7 +227,6 @@ const loadMoreItems = async () => {
227
227
  };
228
228
 
229
229
  const fetchItems = async () => {
230
- console.log('Date is', date.value)
231
230
  const data = await props.store.read({
232
231
  skip: currentSkip.value,
233
232
  limit: currentLimit.value,
@@ -255,12 +254,14 @@ const fetchItems = async () => {
255
254
 
256
255
  watch(() => props.external, (newVal, oldVal) => {
257
256
  if (newVal !== oldVal) {
257
+ currentSkip.value = 0
258
258
  fetchItems();
259
259
  }
260
260
  }, { deep: true });
261
261
 
262
262
  watch(() => date.value, (newVal, oldVal) => {
263
263
  if (newVal !== oldVal) {
264
+ currentSkip.value = 0
264
265
  fetchItems();
265
266
  }
266
267
  }, { deep: true });
@@ -268,6 +269,7 @@ watch(() => date.value, (newVal, oldVal) => {
268
269
  watch(() => sort.value?.order, (newVal, oldVal) => {
269
270
 
270
271
  if (newVal !== oldVal) {
272
+ currentSkip.value = 0
271
273
  fetchItems();
272
274
  }
273
275
  }, { deep: true });
@@ -275,6 +277,7 @@ watch(() => sort.value?.order, (newVal, oldVal) => {
275
277
  watch(() => sort.value?.param, (newVal, oldVal) => {
276
278
 
277
279
  if (newVal !== oldVal) {
280
+ currentSkip.value = 0
278
281
  fetchItems();
279
282
  }
280
283
  }, { deep: true });
@@ -292,6 +295,7 @@ watch(() => props.options, (newVal, oldVal) => {
292
295
  newVal.type !== oldVal.type ||
293
296
  newVal.tags !== oldVal.tags
294
297
  ) {
298
+ currentSkip.value = 0
295
299
  fetchItems();
296
300
  }
297
301
  }, { deep: true });
@@ -10,6 +10,8 @@ const controllerFactory = (db) => {
10
10
 
11
11
  const User = db.user;
12
12
  const Membership = db.membership;
13
+ const Department = db.department;
14
+ const Organization = db.organization;
13
15
  const Invite = db.invite;
14
16
  const Role = db.role;
15
17
 
@@ -146,7 +148,7 @@ const controllerFactory = (db) => {
146
148
 
147
149
  const newMembership = new Membership({
148
150
  type: 'organization',
149
- user: new ObjectId(user._id),
151
+ user: new ObjectId(user._id),
150
152
  target: new ObjectId(invite.owner.target),
151
153
  role: invite.role,
152
154
  label: invite.role
@@ -223,11 +225,75 @@ const controllerFactory = (db) => {
223
225
  }
224
226
  };
225
227
 
228
+ const checkAccesses = async (req, res) => {
229
+ try {
230
+ const uid = new db.mongoose.Types.ObjectId(req.userId);
231
+ const depts = await Department.find({ 'members.user': uid });
232
+
233
+ // Fetch organizations where the user is the owner
234
+ const ownedOrgs = await Organization.find({ owner: uid });
235
+ const ownedOrgIds = ownedOrgs.map(org => org._id.toString());
236
+
237
+ const accesses = {};
238
+
239
+ depts.forEach(dept => {
240
+ const orgId = dept.organization.toString();
241
+
242
+ if (!accesses[orgId]) {
243
+ accesses[orgId] = {
244
+ organization: orgId,
245
+ rights: {}
246
+ };
247
+ }
248
+
249
+ const existingAccess = accesses[orgId].rights;
250
+
251
+ Object.keys(dept.accesses).forEach(key => {
252
+ if (!existingAccess[key]) {
253
+ existingAccess[key] = {};
254
+ }
255
+
256
+ const rights = dept.accesses[key];
257
+
258
+ Object.keys(rights).forEach(right => {
259
+ existingAccess[key][right] = existingAccess[key][right] || rights[right];
260
+ });
261
+ });
262
+ });
263
+
264
+ // Grant all accesses as true if the user is the owner of the organization
265
+ ownedOrgIds.forEach(orgId => {
266
+ if (!accesses[orgId]) {
267
+ accesses[orgId] = {
268
+ organization: orgId,
269
+ rights: {}
270
+ };
271
+ }
272
+
273
+ Object.keys(depts[0].accesses).forEach(key => {
274
+ if (!accesses[orgId].rights[key]) {
275
+ accesses[orgId].rights[key] = {};
276
+ }
277
+
278
+ Object.keys(depts[0].accesses[key]).forEach(right => {
279
+ accesses[orgId].rights[key][right] = true;
280
+ });
281
+ });
282
+ });
283
+
284
+ const accessArray = Object.values(accesses);
285
+ res.status(200).json(accessArray);
286
+ } catch (err) {
287
+ console.error('Error getting accesses:', err);
288
+ res.status(500).json({ message: 'Internal server error' });
289
+ }
290
+ };
226
291
 
227
292
  return {
228
293
  signin,
229
294
  signup,
230
- updatePassword
295
+ updatePassword,
296
+ checkAccesses
231
297
  };
232
298
  };
233
299
 
@@ -8,7 +8,7 @@ module.exports = function(app, db, origins) {
8
8
  const controller = controllerFactory(db);
9
9
  const controllerTwofa = controllerFactoryTwofa(db);
10
10
 
11
- const { verifySignUp, verifyUser } = middlewareFactory(db);
11
+ const { verifySignUp, verifyUser, authJwt } = middlewareFactory(db);
12
12
 
13
13
  app.post(
14
14
  "/api/auth/signup",
@@ -37,4 +37,11 @@ module.exports = function(app, db, origins) {
37
37
  controller.updatePassword
38
38
  );
39
39
 
40
+ app.get(
41
+ "/api/auth/check-accesses",
42
+ [
43
+ authJwt.verifyToken,
44
+ ],
45
+ controller.checkAccesses
46
+ );
40
47
  };
@@ -26,28 +26,40 @@
26
26
  token: null,
27
27
  status: false
28
28
  },
29
+ accesses: [
30
+ ]
29
31
  });
30
32
 
31
33
  async function initialize() {
32
-
34
+ try {
33
35
  const userCookie = await getCookie('user');
34
36
 
35
37
  if (userCookie) {
36
38
  const { _id, email, phone, roles, accessToken } = userCookie;
37
39
 
38
- Object.assign(state.user, { _id, email, phone });
39
- Object.assign(state.access, { token: accessToken, roles, status: !!accessToken });
40
-
41
- $axios.interceptors.request.use((config) => {
42
- if (accessToken) {
43
- config.headers['x-access-token'] = accessToken;
44
- }
40
+ // Установка токена в Axios интерцептор для всех запросов
41
+ axios.interceptors.request.use(config => {
42
+ config.headers['x-access-token'] = accessToken;
45
43
  return config;
46
- }, (error) => {
44
+ }, error => {
47
45
  return Promise.reject(error);
48
46
  });
47
+
48
+ // Проверка токена через серверный маршрут
49
+ const response = await axios.get('/api/auth/check-accesses');
50
+ const userAccesses = response.data;
51
+
52
+ // Обновление состояния приложения с информацией о пользователе и его правах доступа
53
+ Object.assign(state.user, { _id, email, phone });
54
+ Object.assign(state.access, { token: accessToken, roles, status: !!accessToken });
55
+ state.accesses = userAccesses;
49
56
  }
57
+ } catch (error) {
58
+ console.error('Error initializing app:', error);
59
+ removeCookie('user');
60
+ state.accesses = [];
50
61
  }
62
+ }
51
63
 
52
64
  initialize();
53
65
 
@@ -6,6 +6,7 @@
6
6
  class="bg-light mn-b-semi"
7
7
  >
8
8
  <MenuItem
9
+ v-if="hasAccess(route.params._id, 'members', 'read', auth.state.accesses)"
9
10
  @click="router.push({
10
11
  name: 'Organization Members',
11
12
  params: {
@@ -34,6 +35,7 @@
34
35
  </MenuItem> -->
35
36
 
36
37
  <MenuItem
38
+ v-if="hasAccess(route.params._id, 'products', 'read', auth.state.accesses)"
37
39
  @click="router.push({
38
40
  name: 'Products',
39
41
  params: {
@@ -48,6 +50,7 @@
48
50
  </MenuItem>
49
51
 
50
52
  <MenuItem
53
+ v-if="hasAccess(route.params._id, 'leftovers', 'read', auth.state.accesses)"
51
54
  @click="router.push({
52
55
  name: 'Leftovers',
53
56
  params: {
@@ -62,6 +65,7 @@
62
65
  </MenuItem>
63
66
 
64
67
  <MenuItem
68
+ v-if="hasAccess(route.params._id, 'orders', 'read', auth.state.accesses)"
65
69
  @click="router.push({
66
70
  name: 'Backoffice Orders',
67
71
  params: {
@@ -76,6 +80,7 @@
76
80
  </MenuItem>
77
81
 
78
82
  <MenuItem
83
+ v-if="hasAccess(route.params._id, 'gallery', 'read', auth.state.accesses)"
79
84
  @click="router.push({
80
85
  name: 'Backoffice Gallery',
81
86
  params: {
@@ -90,6 +95,7 @@
90
95
  </MenuItem>
91
96
 
92
97
  <MenuItem
98
+ v-if="hasAccess(route.params._id, 'events', 'read', auth.state.accesses)"
93
99
  @click="router.push({
94
100
  name: 'Backoffice Events',
95
101
  params: {
@@ -1,4 +1,4 @@
1
- import * as galleryStore from './store/gallery.js';
1
+ import galleryStore from './store/gallery.js';
2
2
 
3
3
  // Importing Vue Router routes from the router directory
4
4
  import galleryRouter from './router/gallery.router.js';
@@ -2,32 +2,36 @@
2
2
  const controllerFactory = require("../controllers/gallery.controller");
3
3
  // Middlewares
4
4
  const middlewareFactoryGlobal = require('@pf/src/modules/middlewares/server');
5
+ const middlewareFactoryAccesses = require('@pf/src/modules/middlewares/server/verifyAccesses')
5
6
 
6
7
  module.exports = function(app, db, origins) {
7
8
  const controller = controllerFactory(db);
8
9
 
9
10
  const { authJwt } = middlewareFactoryGlobal(db);
11
+ const { verifyRead } = middlewareFactoryAccesses(db)
12
+
10
13
 
11
14
  app.get(
12
15
  "/api/gallery/read",
16
+ [
17
+ authJwt.verifyToken,
18
+ verifyRead('gallery'),
19
+ ],
13
20
  controller.read
14
21
  );
15
22
 
16
23
  app.post(
17
24
  "/api/gallery/create",
18
- [authJwt.verifyToken],
19
25
  controller.create
20
26
  );
21
27
 
22
28
  app.put(
23
29
  "/api/gallery/update",
24
- [authJwt.verifyToken],
25
30
  controller.update
26
31
  );
27
32
 
28
33
  app.delete(
29
34
  "/api/gallery/delete/:_id",
30
- [authJwt.verifyToken],
31
35
  controller.delete
32
36
  );
33
37
  };
@@ -1,6 +1,23 @@
1
1
  // mixins.js
2
2
  export const globalMixins = {
3
3
  methods: {
4
+ hasAccess(organizationId, rightCategory, rightType, accesses) {
5
+ const accessArray = accesses;
6
+
7
+ const organizationAccess = accessArray.find(access => access.organization === organizationId);
8
+
9
+ if (!organizationAccess) {
10
+ return false;
11
+ }
12
+
13
+ const categoryAccess = organizationAccess.rights[rightCategory];
14
+
15
+ if (!categoryAccess) {
16
+ return false;
17
+ }
18
+
19
+ return categoryAccess[rightType] === true;
20
+ },
4
21
  returnCurrency() {
5
22
  const currency = '฿'
6
23
  return currency
@@ -2,7 +2,7 @@
2
2
  <Feed
3
3
  v-model:sort="store.marketplace.state.sort"
4
4
  :search="true"
5
- :showLoadMore="false"
5
+ :showLoadMore="false"
6
6
  :states="{
7
7
  empty: {
8
8
  title: 'No Shops Found',
@@ -1,33 +1,110 @@
1
- const ReadDepartments = require('./accessors/ReadDepartments');
1
+ const middlewareFactory = (db) => {
2
+ const User = db.user;
3
+ const Organization = db.organization;
4
+ const Department = db.department;
2
5
 
3
- module.exports = (db) => {
4
- // Объекты посредников
5
- const instances = [];
6
+ const verifyRead = (resource) => {
7
+ return async (req, res, next) => {
8
+ try {
9
+ // Получаем идентификатор организации из запроса
10
+ const ownerOrgId = new db.mongoose.Types.ObjectId(req.query.owner);;
6
11
 
7
- // Регистрация посредников отвечающий за проверку прав доступа
8
- const middlewares = [
9
- ReadDepartments,
10
- ];
12
+ // Получаем текущего пользователя
13
+ const userId = new db.mongoose.Types.ObjectId(req.userId);
11
14
 
12
- let nextMiddleware = null;
15
+ // Проверяем, является ли пользователь владельцем организации
16
+ const isOwnerOfOrg = await Organization.exists({
17
+ _id: ownerOrgId,
18
+ owner: userId
19
+ });
13
20
 
14
- // Собираем цепочку посредников
15
- for (let i = middlewares.length - 1; i >= 0; i--) {
16
- const Middleware = middlewares[i];
17
- const middleware = new Middleware();
21
+ // Если пользователь является владельцем организации, ему разрешен доступ ко всем ресурсам
22
+ if (isOwnerOfOrg) {
23
+ return next();
24
+ }
18
25
 
19
- // Передаем в посредники параметры
20
- middleware.db = db;
26
+ // Проверяем, является ли пользователь членом организации через департаменты
27
+ const isMemberOfOrg = await Department.exists({
28
+ organization: ownerOrgId,
29
+ 'members.user': userId
30
+ });
21
31
 
22
- // Добавляем звено следующего посредника
23
- middleware.next = nextMiddleware;
24
32
 
25
- // Добавляем middleware в начало массива.
26
- instances.unshift(middleware);
33
+ if (!isMemberOfOrg) {
34
+ // Если пользователь не является членом организации, ограничиваем доступ к опубликованным ресурсам
35
+ req.query.status = 'published';
36
+ } else {
37
+ // Пользователь является членом организации, проверяем его права доступа
27
38
 
28
- nextMiddleware = middleware;
29
- }
39
+ // Находим все департаменты данной организации, к которым относится пользователь
40
+ const departments = await Department.find({ organization: ownerOrgId });
30
41
 
31
- // Запускам цепочку зарегестрированных посредников
32
- return (rule, entity) => instances[0].check(rule, entity);
42
+ // Проверяем доступ пользователя ко всем ресурсам
43
+ let hasAccess = false;
44
+
45
+ for (const department of departments) {
46
+ const accessRights = department.accesses[resource];
47
+ if (accessRights && accessRights.read) {
48
+ // Если хотя бы в одном департаменте есть права на чтение ресурса, разрешаем доступ
49
+ hasAccess = true;
50
+ break;
51
+ }
52
+ }
53
+
54
+ if (!hasAccess) {
55
+ // Если у пользователя нет прав на чтение данного ресурса ни в одном департаменте, ограничиваем доступ к опубликованным ресурсам
56
+ req.query.status = 'published';
57
+ }
58
+ }
59
+
60
+ next();
61
+ } catch (err) {
62
+ console.error('Access control error:', err);
63
+ return res.status(403).json({ error: 'Access denied' });
64
+ }
65
+ };
66
+ };
67
+
68
+ // Middleware для проверки доступа
69
+ const verifyModify = (action, resource) => {
70
+ return async (req, res, next) => {
71
+ try {
72
+ const user = req.userId;
73
+
74
+ const department = await Department.findOne({
75
+ owner: organizationId
76
+ });
77
+
78
+ if (!department) {
79
+ return res.status(403).json({
80
+ message: "Access forbidden"
81
+ });
82
+ }
83
+
84
+ const accesses = department.accesses;
85
+
86
+ // Проверяем права доступа пользователя к ресурсу
87
+ const resourceAccess = accesses[resource];
88
+ if (!resourceAccess || !resourceAccess[action]) {
89
+ return res.status(403).json({
90
+ message: "Access forbidden"
91
+ });
92
+ }
93
+
94
+ next();
95
+ } catch (error) {
96
+ console.error("Access control error:", error);
97
+ return res.status(500).json({
98
+ message: "Internal server error"
99
+ });
100
+ }
101
+ };
102
+ };
103
+
104
+
105
+ return {
106
+ verifyRead,
107
+ };
33
108
  };
109
+
110
+ module.exports = middlewareFactory;
@@ -32,7 +32,7 @@
32
32
  <ul>
33
33
  <li v-if="department.members.length < 1">No members in department</li>
34
34
  <User
35
- class="pd-small br-solid br-1px br-black-transp-5 radius-small mn-b-thin"
35
+ class="h-4r pd-small br-solid br-1px br-black-transp-5 radius-small mn-b-thin"
36
36
  v-for="(member, index) in department.members"
37
37
  :key="index"
38
38
  :user="member.user"
@@ -54,7 +54,7 @@
54
54
  class="cols-1 gap-thin mn-b-thin"
55
55
  >
56
56
  <CardUser
57
- class="bg-white pd-thin radius-medium w-100"
57
+ class="h-4r bg-white pd-thin radius-medium w-100"
58
58
  v-for="(member, index) in departments.state.department.members"
59
59
  :key="index"
60
60
  :user="member.user"
@@ -110,7 +110,7 @@
110
110
  globals.actions.add(departments.state.department.members, { _id: user.user._id, user: user.user, position: 'Member'})
111
111
  closeMemberPopup();
112
112
  }"
113
- class="bg-white pd-thin radius-medium w-100 mn-b-thin"
113
+ class="h-4r bg-white pd-thin radius-medium w-100 mn-b-thin"
114
114
  />
115
115
  </Feed>
116
116
  </Popup>
@@ -139,6 +139,28 @@
139
139
  <p class="p-medium mn-b-small">Please select organization accesses for user in department:</p>
140
140
 
141
141
  <div class="cols-1 gap-thin">
142
+ <h4>Gallery</h4>
143
+ <Checkbox
144
+ label="Read gallery"
145
+ name="readProducts"
146
+ class="w-100 mn-r-small bg-white radius-small pd-small"
147
+ :radio="departments.state.department.accesses.gallery.read"
148
+ @update:radio="updated => (departments.state.department.accesses.gallery.read = !departments.state.department.accesses.gallery.read)"
149
+ />
150
+ <Checkbox
151
+ label="Edit gallery"
152
+ name="editProducts"
153
+ class="w-100 mn-r-small bg-white radius-small pd-small"
154
+ :radio="departments.state.department.accesses.gallery.edit"
155
+ @update:radio="updated => (departments.state.department.accesses.gallery.edit = !departments.state.department.accesses.gallery.edit)"
156
+ />
157
+ <Checkbox
158
+ label="Delete gallery"
159
+ name="deleteProducts"
160
+ class="w-100 bg-white radius-small pd-small"
161
+ :radio="departments.state.department.accesses.gallery.delete"
162
+ @update:radio="updated => (departments.state.department.accesses.gallery.delete = !departments.state.department.accesses.gallery.delete)"
163
+ />
142
164
  <h4>Products</h4>
143
165
  <Checkbox
144
166
  label="Read products"
@@ -151,7 +151,7 @@
151
151
  },
152
152
  method: () => removeInvite(index, invite)
153
153
  }"
154
- class="w-100 bg-light radius-big flex-nowrap flex pd-medium"
154
+ class="h-4r w-100 bg-light radius-big flex-nowrap flex pd-medium"
155
155
  />
156
156
  </Feed>
157
157
  </div>
@@ -28,6 +28,48 @@ module.exports = (mongoose) => {
28
28
  },
29
29
 
30
30
  accesses: {
31
+ members: {
32
+ read: {
33
+ type: Boolean,
34
+ default: false,
35
+ },
36
+ edit: {
37
+ type: Boolean,
38
+ default: false,
39
+ },
40
+ delete: {
41
+ type: Boolean,
42
+ default: false,
43
+ },
44
+ },
45
+ gallery: {
46
+ read: {
47
+ type: Boolean,
48
+ default: false,
49
+ },
50
+ edit: {
51
+ type: Boolean,
52
+ default: false,
53
+ },
54
+ delete: {
55
+ type: Boolean,
56
+ default: false,
57
+ },
58
+ },
59
+ leftovers: {
60
+ read: {
61
+ type: Boolean,
62
+ default: false,
63
+ },
64
+ edit: {
65
+ type: Boolean,
66
+ default: false,
67
+ },
68
+ delete: {
69
+ type: Boolean,
70
+ default: false,
71
+ },
72
+ },
31
73
  products: {
32
74
  read: {
33
75
  type: Boolean,
@@ -42,7 +84,6 @@ module.exports = (mongoose) => {
42
84
  default: false,
43
85
  },
44
86
  },
45
-
46
87
  orders: {
47
88
  read: {
48
89
  type: Boolean,
@@ -57,7 +98,6 @@ module.exports = (mongoose) => {
57
98
  default: false,
58
99
  },
59
100
  },
60
-
61
101
  departments: {
62
102
  read: {
63
103
  type: Boolean,
@@ -1,19 +1,12 @@
1
1
  // Factories
2
2
  const controllerFactory = require("../controllers/departments.controller")
3
- // Middlewares
4
- const accessMiddlewaresFactory = require('@pf/src/modules/middlewares/server/verifyAccesses')
5
-
6
3
  // Routes
7
4
  module.exports = function(app, db) {
8
5
  const controller = controllerFactory(db)
9
- const verifyAccesses = accessMiddlewaresFactory(db)
10
-
6
+
11
7
  // Get organization departments by _id
12
8
  app.get(
13
9
  "/api/departments/read",
14
- // [
15
- // verifyAccesses('read', 'departments'),
16
- // ],
17
10
  controller.read
18
11
  );
19
12
 
@@ -34,6 +34,11 @@ const state = reactive({
34
34
  // Accesses
35
35
  hidden: false,
36
36
  accesses: {
37
+ gallery: {
38
+ read: false,
39
+ edit: false,
40
+ delete: false,
41
+ },
37
42
  products: {
38
43
  read: false,
39
44
  edit: false,