@ozdao/martyrs 0.2.473 → 0.2.474

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.
Files changed (134) hide show
  1. package/dist/{Media-DW8RLbfM.js → Media-_vz04tII.js} +1 -1
  2. package/dist/{Media-y_TX6us_.mjs → Media-sGk7Bp9b.mjs} +1 -1
  3. package/dist/auth.server.js +6 -2
  4. package/dist/auth.server.mjs +6 -2
  5. package/dist/authJwt-CELQKF2s.js +82 -0
  6. package/dist/authJwt-DnXu3BFq.mjs +83 -0
  7. package/dist/builder.js +7 -4
  8. package/dist/builder.mjs +7 -4
  9. package/dist/chats.server.js +1 -1
  10. package/dist/chats.server.mjs +1 -1
  11. package/dist/community.server.js +4 -4
  12. package/dist/community.server.mjs +4 -4
  13. package/dist/events.server.js +4 -4
  14. package/dist/events.server.mjs +4 -4
  15. package/dist/files.server.js +1 -1
  16. package/dist/files.server.mjs +1 -1
  17. package/dist/gallery.server.js +3 -3
  18. package/dist/gallery.server.mjs +3 -3
  19. package/dist/{globals.abac-DT0VjfaZ.js → globals.abac-Bn-4tbX8.js} +110 -16
  20. package/dist/{globals.abac-CvmZM8XG.mjs → globals.abac-DZpTRxKR.mjs} +110 -16
  21. package/dist/globals.server.js +70 -10
  22. package/dist/globals.server.mjs +70 -10
  23. package/dist/{globals.verifier-C_VZYebB.mjs → globals.verifier-BdJxc8-8.mjs} +34 -0
  24. package/dist/{globals.verifier-ChDpCdy_.js → globals.verifier-CKYpYfQl.js} +34 -0
  25. package/dist/{index-CVXl1rB5.js → index-BOmxJQ5W.js} +7 -86
  26. package/dist/{index-Df8vtZx7.mjs → index-C_Fw0Umg.mjs} +7 -86
  27. package/dist/{main-CgmHzhq5.mjs → main-CqMtW7Hq.mjs} +274 -276
  28. package/dist/{main-CCfQH-Dd.js → main-CsGkbSyK.js} +2 -2
  29. package/dist/martyrs/src/components/Select/Select.vue.cjs +4 -4
  30. package/dist/martyrs/src/components/Select/Select.vue.cjs.map +1 -1
  31. package/dist/martyrs/src/components/Select/Select.vue.js +4 -4
  32. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -1
  33. package/dist/martyrs/src/modules/community/community.client.js +27 -27
  34. package/dist/martyrs/src/modules/community/community.client.js.map +1 -1
  35. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.cjs +2 -3
  36. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.cjs.map +1 -1
  37. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.js +2 -3
  38. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.js.map +1 -1
  39. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +88 -27
  40. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs.map +1 -1
  41. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +89 -28
  42. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
  43. package/dist/martyrs/src/modules/orders/store/shopcart.cjs +1 -0
  44. package/dist/martyrs/src/modules/orders/store/shopcart.cjs.map +1 -1
  45. package/dist/martyrs/src/modules/orders/store/shopcart.js +1 -0
  46. package/dist/martyrs/src/modules/orders/store/shopcart.js.map +1 -1
  47. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +19 -0
  48. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  49. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +19 -0
  50. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  51. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -0
  52. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs.map +1 -1
  53. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -0
  54. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  55. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
  56. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs.map +1 -1
  57. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
  58. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
  59. package/dist/martyrs/src/modules/products/store/categories.cjs +2 -0
  60. package/dist/martyrs/src/modules/products/store/categories.cjs.map +1 -1
  61. package/dist/martyrs/src/modules/products/store/categories.js +2 -0
  62. package/dist/martyrs/src/modules/products/store/categories.js.map +1 -1
  63. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +30 -24
  64. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs.map +1 -1
  65. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +30 -24
  66. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js.map +1 -1
  67. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +807 -0
  68. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs.map +1 -0
  69. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +807 -0
  70. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js.map +1 -0
  71. package/dist/martyrs/src/modules/spots/store/spots.cjs +4 -1
  72. package/dist/martyrs/src/modules/spots/store/spots.cjs.map +1 -1
  73. package/dist/martyrs/src/modules/spots/store/spots.js +4 -1
  74. package/dist/martyrs/src/modules/spots/store/spots.js.map +1 -1
  75. package/dist/martyrs.cjs.js +1 -1
  76. package/dist/martyrs.css +1 -1
  77. package/dist/martyrs.es.js +1 -1
  78. package/dist/notifications.server.js +1 -1
  79. package/dist/notifications.server.mjs +1 -1
  80. package/dist/orders.server.js +5 -4
  81. package/dist/orders.server.mjs +5 -4
  82. package/dist/organizations.server.js +120 -47
  83. package/dist/organizations.server.mjs +120 -47
  84. package/dist/{ownership.schema-C0w02Vw1.mjs → ownership.schema-CNCotD3D.mjs} +10 -4
  85. package/dist/{ownership.schema-Ck2H9clB.js → ownership.schema-MxfJlPtq.js} +10 -4
  86. package/dist/products.server.js +415 -149
  87. package/dist/products.server.mjs +415 -149
  88. package/dist/{profile.schema-h61hhB2w.js → profile.schema-BLSuV_VC.js} +0 -4
  89. package/dist/{profile.schema-kP_zKXNt.mjs → profile.schema-BRuvQ7QV.mjs} +0 -4
  90. package/dist/{queryProcessor-CWnMIe2U.mjs → queryProcessor-CVKI651_.mjs} +62 -8
  91. package/dist/{queryProcessor-D6GuKfTV.js → queryProcessor-DSUqSk3I.js} +62 -8
  92. package/dist/rents.server.js +4 -4
  93. package/dist/rents.server.mjs +4 -4
  94. package/dist/spots.server.js +162 -8
  95. package/dist/spots.server.mjs +162 -8
  96. package/dist/style.css +27 -4
  97. package/dist/wallet.server.js +2 -2
  98. package/dist/wallet.server.mjs +2 -2
  99. package/package.json +1 -1
  100. package/src/builder/rspack/rspack.config.base.js +1 -1
  101. package/src/builder/rspack/rspack.config.client.js +13 -5
  102. package/src/components/Select/Select.vue +4 -2
  103. package/src/modules/auth/models/user.model.js +4 -1
  104. package/src/modules/community/components/sections/HotPosts.vue +1 -1
  105. package/src/modules/globals/controllers/classes/globals.abac.js +148 -23
  106. package/src/modules/globals/controllers/classes/globals.validator.js +37 -0
  107. package/src/modules/globals/controllers/classes/globals.verifier.js +2 -0
  108. package/src/modules/globals/controllers/policies/globals.policies.js +91 -74
  109. package/src/modules/globals/controllers/utils/queryProcessor.js +59 -11
  110. package/src/modules/globals/models/schemas/ownership.schema.js +11 -6
  111. package/src/modules/globals/models/schemas/profile.schema.js +0 -4
  112. package/src/modules/music/components/layouts/MusicLayout.vue +10 -58
  113. package/src/modules/music/components/pages/MusicHome.vue +5 -5
  114. package/src/modules/orders/components/pages/OrderCreate.vue +85 -12
  115. package/src/modules/orders/controllers/orders.controller.js +3 -0
  116. package/src/modules/orders/store/shopcart.js +1 -0
  117. package/src/modules/organizations/models/schemas/accesses.schema.js +18 -0
  118. package/src/modules/organizations/policies/organizations.policies.js +117 -61
  119. package/src/modules/products/components/pages/CategoryEdit.vue +27 -2
  120. package/src/modules/products/components/pages/Product.vue +1 -0
  121. package/src/modules/products/components/pages/ProductEdit.vue +2 -2
  122. package/src/modules/products/controllers/categories.controller.js +297 -133
  123. package/src/modules/products/middlewares/categories.verifier.js +177 -0
  124. package/src/modules/products/models/category.model.js +12 -14
  125. package/src/modules/products/routes/categories.routes.js +50 -11
  126. package/src/modules/products/store/categories.js +2 -0
  127. package/src/modules/spots/components/pages/SpotEdit.vue +21 -17
  128. package/src/modules/spots/components/sections/WorktimeEdit.vue +840 -0
  129. package/src/modules/spots/controllers/queries/getIsOpenNowStage.js +109 -0
  130. package/src/modules/spots/controllers/spots.controller.js +2 -1
  131. package/src/modules/spots/models/spot.model.js +59 -13
  132. package/src/modules/spots/store/spots.js +4 -1
  133. package/src/modules/products/middlewares/index.js +0 -11
  134. package/src/modules/products/middlewares/verifyCategory.js +0 -25
@@ -24,7 +24,11 @@ module.exports = function initializeOrganizationPolicies(abacAccessControl, db)
24
24
  const { user, resource, data, action, currentResource, req } = context;
25
25
 
26
26
  if (!resource || !action) {
27
- return false; // Защита от отсутствия обязательных параметров
27
+ return {
28
+ allow: false,
29
+ force: false,
30
+ reason: 'MISSING_REQUIRED_PARAMETERS'
31
+ };
28
32
  }
29
33
 
30
34
  // Безопасный поиск ID организации
@@ -44,72 +48,124 @@ module.exports = function initializeOrganizationPolicies(abacAccessControl, db)
44
48
 
45
49
  const orgId = findOrgId();
46
50
 
47
- if (orgId) {
48
- // Если пользователь указан, проверяем его доступы
49
- if (user) {
50
- try {
51
- // Проверяем, является ли пользователь владельцем организации
52
- const objectId = new db.mongoose.Types.ObjectId(orgId);
53
- const isOrgOwner = await Organization.exists({
54
- _id: objectId,
55
- owner: user
56
- });
57
-
58
- if (isOrgOwner) {
59
- return true; // Пользователь владелец, доступ есть
60
- }
61
-
62
- // Проверяем доступы в департаментах
63
- const departments = await Department.find({
64
- organization: objectId,
65
- 'members.user': user
66
- });
67
-
68
- const hasAccess = departments.some(department => {
69
- const accessRights = department.accesses?.[resource];
70
- return accessRights && accessRights[action];
71
- });
72
-
73
- if (hasAccess) {
74
- return true; // Доступ через департамент есть
75
- }
76
- } catch (error) {
77
- console.error('Error checking user access:', error);
78
- return false;
51
+ // Если не связано с организацией, пропускаем эту политику
52
+ if (!orgId) {
53
+ return {
54
+ allow: true,
55
+ force: false,
56
+ reason: 'NOT_ORGANIZATION_RESOURCE'
57
+ };
58
+ }
59
+
60
+ // Если пользователь указан, проверяем его доступы
61
+ if (user) {
62
+ try {
63
+ // Проверяем, является ли пользователь владельцем организации
64
+ const objectId = new db.mongoose.Types.ObjectId(orgId);
65
+ const isOrgOwner = await Organization.exists({
66
+ _id: objectId,
67
+ owner: user
68
+ });
69
+
70
+ if (isOrgOwner) {
71
+ return {
72
+ allow: true,
73
+ force: true, // Владелец организации получает принудительный доступ
74
+ reason: 'ORGANIZATION_OWNER_ACCESS'
75
+ };
76
+ }
77
+
78
+ // Проверяем доступы в департаментах
79
+ const departments = await Department.find({
80
+ organization: objectId,
81
+ 'members.user': user
82
+ });
83
+
84
+ const hasAccess = departments.some(department => {
85
+ const accessRights = department.accesses?.[resource];
86
+ return accessRights && accessRights[action];
87
+ });
88
+
89
+ if (hasAccess) {
90
+ return {
91
+ allow: true,
92
+ force: false, // Доступ через департамент не является принудительным
93
+ reason: 'DEPARTMENT_MEMBER_ACCESS'
94
+ };
79
95
  }
96
+ } catch (error) {
97
+ console.error('Error checking user access:', error);
98
+ return {
99
+ allow: false,
100
+ force: false,
101
+ reason: 'ORGANIZATION_ACCESS_CHECK_ERROR'
102
+ };
80
103
  }
81
-
82
- // Если доступа у пользователя нет, переходим к валидации query
83
- if (action === 'read' && req && req.query) {
84
- try {
85
- // Валидируем параметры запроса
86
- const validationResult = publicAccessVerifier.verify(req.query, {
87
- only: ['status']
88
- });
89
-
90
- // Обновляем query параметры в запросе
91
- req.query = validationResult.verifiedData;
92
-
93
- // Сохраняем результаты валидации
94
- req.queryValidation = validationResult;
95
-
96
- // Проверяем статус ресурса, если он есть
97
- if (currentResource && !publicAccessVerifier.verifyParam('status', currentResource.status)) {
98
- return false; // Если статус невалидный, доступ запрещён
99
- }
100
-
101
- return validationResult.isValid; // Возвращаем результат валидации
102
- } catch (error) {
103
- console.error('Error validating query:', error);
104
- return false;
104
+ }
105
+
106
+ // Если доступа у пользователя нет, переходим к валидации query для публичного доступа
107
+ if (action === 'read' && req && req.query) {
108
+ try {
109
+ // Валидируем параметры запроса
110
+ const validationResult = publicAccessVerifier.verify(req.query, {
111
+ only: ['status']
112
+ });
113
+
114
+ // Обновляем query параметры в запросе
115
+ req.query = validationResult.verifiedData;
116
+
117
+ // Сохраняем результаты валидации
118
+ req.queryValidation = validationResult;
119
+
120
+ // Проверяем статус ресурса, если он есть
121
+ if (currentResource && !publicAccessVerifier.verifyParam('status', currentResource.status)) {
122
+ return {
123
+ allow: false,
124
+ force: false, // Принудительно запрещаем доступ к непубличным ресурсам
125
+ reason: 'INVALID_RESOURCE_STATUS_FOR_PUBLIC_ACCESS'
126
+ };
127
+ }
128
+
129
+ if (validationResult.isValid) {
130
+ return {
131
+ allow: true,
132
+ force: false,
133
+ reason: 'PUBLIC_ACCESS_ALLOWED'
134
+ };
135
+ } else {
136
+ return {
137
+ allow: false,
138
+ force: false, // Принудительно запрещаем, если невалидные параметры
139
+ reason: 'INVALID_PUBLIC_ACCESS_PARAMETERS'
140
+ };
105
141
  }
142
+ } catch (error) {
143
+ console.error('Error validating query:', error);
144
+ return {
145
+ allow: false,
146
+ force: false,
147
+ reason: 'QUERY_VALIDATION_ERROR'
148
+ };
106
149
  }
107
-
108
- // Доступ запрещён, если ни одна проверка не прошла
109
- return false;
110
150
  }
111
151
 
112
- return true; // Если организация не указана, доступ разрешен
152
+ // Для других операций, кроме read (create, edit, delete),
153
+ // если пользователь не имеет прав, принудительно запрещаем
154
+ if (action !== 'read') {
155
+ return {
156
+ allow: false,
157
+ force: false,
158
+ reason: 'ORGANIZATION_RESOURCE_OPERATION_FORBIDDEN'
159
+ };
160
+ }
161
+
162
+ // Для read, если не прошли ни одну проверку,
163
+ // принудительно запрещаем доступ к ресурсу организации
164
+ return {
165
+ allow: false,
166
+ force: false,
167
+ reason: 'ORGANIZATION_RESOURCE_ACCESS_DENIED'
168
+ };
113
169
  });
114
170
 
115
171
  // Добавляем методы для управления валидатором в ABAC с защитой от внедрения
@@ -17,8 +17,7 @@
17
17
  title="Profile"
18
18
  class="mn-b-thin"
19
19
  >
20
-
21
- <div class="mn-b-medium w-100 flex-nowrap gap-thin flex">
20
+ <div class="mn-b-medium w-100 flex-nowrap gap-thin flex">
22
21
  <UploadImage
23
22
  v-model:photo="categories.state.current.photo"
24
23
  :uploadPath="'categories'"
@@ -239,9 +238,35 @@
239
238
  // Functions
240
239
  async function onSubmit() {
241
240
  if (route.params.category) {
241
+
242
+ categories.state.current.creator = {
243
+ type: categories.state.current.creator.type,
244
+ hidden: categories.state.current.creator.hidden,
245
+ target: categories.state.current.creator.target._id
246
+ }
247
+
248
+ categories.state.current.owner = {
249
+ type: categories.state.current.owner.type,
250
+ target: categories.state.current.owner.target._id
251
+ }
252
+
242
253
  await categories.actions.update(categories.state.current)
254
+
243
255
  redirectTo()
244
256
  } else {
257
+
258
+ categories.state.current.creator = {
259
+ type: 'user',
260
+ hidden: false,
261
+ target: auth.state.user._id
262
+ }
263
+
264
+ categories.state.current.owner = {
265
+ type: route.params._id ? 'organization' : 'platform',
266
+ hidden: false,
267
+ target: route.params._id ? route.params._id : null
268
+ }
269
+
245
270
  await categories.actions.create(categories.state.current)
246
271
  redirectTo()
247
272
  }
@@ -220,6 +220,7 @@ async function addToCart(product, selectedDates = null) {
220
220
  if (!result) throw error
221
221
 
222
222
  shopcart.state.positions = []
223
+ shopcart.state.organization = product.owner.target._id
223
224
  }
224
225
 
225
226
  if (typeof gtag === 'function') {
@@ -53,11 +53,11 @@
53
53
  function: () => router.push({
54
54
  name: 'Categories',
55
55
  params: {
56
- _id: route.params._id
56
+ _id: route.params._id || products.state.current.owner.target._id
57
57
  }
58
58
  })
59
59
  }]"
60
- class="h-100 o-y-scroll"
60
+ class="h-100 h-min-30r o-y-scroll"
61
61
  >
62
62
  <Tree
63
63
  v-if="categories.state.all"