@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.
- package/dist/{Media-DW8RLbfM.js → Media-_vz04tII.js} +1 -1
- package/dist/{Media-y_TX6us_.mjs → Media-sGk7Bp9b.mjs} +1 -1
- package/dist/auth.server.js +6 -2
- package/dist/auth.server.mjs +6 -2
- package/dist/authJwt-CELQKF2s.js +82 -0
- package/dist/authJwt-DnXu3BFq.mjs +83 -0
- package/dist/builder.js +7 -4
- package/dist/builder.mjs +7 -4
- package/dist/chats.server.js +1 -1
- package/dist/chats.server.mjs +1 -1
- package/dist/community.server.js +4 -4
- package/dist/community.server.mjs +4 -4
- package/dist/events.server.js +4 -4
- package/dist/events.server.mjs +4 -4
- package/dist/files.server.js +1 -1
- package/dist/files.server.mjs +1 -1
- package/dist/gallery.server.js +3 -3
- package/dist/gallery.server.mjs +3 -3
- package/dist/{globals.abac-DT0VjfaZ.js → globals.abac-Bn-4tbX8.js} +110 -16
- package/dist/{globals.abac-CvmZM8XG.mjs → globals.abac-DZpTRxKR.mjs} +110 -16
- package/dist/globals.server.js +70 -10
- package/dist/globals.server.mjs +70 -10
- package/dist/{globals.verifier-C_VZYebB.mjs → globals.verifier-BdJxc8-8.mjs} +34 -0
- package/dist/{globals.verifier-ChDpCdy_.js → globals.verifier-CKYpYfQl.js} +34 -0
- package/dist/{index-CVXl1rB5.js → index-BOmxJQ5W.js} +7 -86
- package/dist/{index-Df8vtZx7.mjs → index-C_Fw0Umg.mjs} +7 -86
- package/dist/{main-CgmHzhq5.mjs → main-CqMtW7Hq.mjs} +274 -276
- package/dist/{main-CCfQH-Dd.js → main-CsGkbSyK.js} +2 -2
- package/dist/martyrs/src/components/Select/Select.vue.cjs +4 -4
- package/dist/martyrs/src/components/Select/Select.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Select/Select.vue.js +4 -4
- package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/community.client.js +27 -27
- package/dist/martyrs/src/modules/community/community.client.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.cjs +2 -3
- package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.js +2 -3
- package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +88 -27
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +89 -28
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/store/shopcart.cjs +1 -0
- package/dist/martyrs/src/modules/orders/store/shopcart.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/store/shopcart.js +1 -0
- package/dist/martyrs/src/modules/orders/store/shopcart.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +19 -0
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +19 -0
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -0
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -0
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/store/categories.cjs +2 -0
- package/dist/martyrs/src/modules/products/store/categories.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/store/categories.js +2 -0
- package/dist/martyrs/src/modules/products/store/categories.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +30 -24
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +30 -24
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +807 -0
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +807 -0
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js.map +1 -0
- package/dist/martyrs/src/modules/spots/store/spots.cjs +4 -1
- package/dist/martyrs/src/modules/spots/store/spots.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/store/spots.js +4 -1
- package/dist/martyrs/src/modules/spots/store/spots.js.map +1 -1
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/notifications.server.js +1 -1
- package/dist/notifications.server.mjs +1 -1
- package/dist/orders.server.js +5 -4
- package/dist/orders.server.mjs +5 -4
- package/dist/organizations.server.js +120 -47
- package/dist/organizations.server.mjs +120 -47
- package/dist/{ownership.schema-C0w02Vw1.mjs → ownership.schema-CNCotD3D.mjs} +10 -4
- package/dist/{ownership.schema-Ck2H9clB.js → ownership.schema-MxfJlPtq.js} +10 -4
- package/dist/products.server.js +415 -149
- package/dist/products.server.mjs +415 -149
- package/dist/{profile.schema-h61hhB2w.js → profile.schema-BLSuV_VC.js} +0 -4
- package/dist/{profile.schema-kP_zKXNt.mjs → profile.schema-BRuvQ7QV.mjs} +0 -4
- package/dist/{queryProcessor-CWnMIe2U.mjs → queryProcessor-CVKI651_.mjs} +62 -8
- package/dist/{queryProcessor-D6GuKfTV.js → queryProcessor-DSUqSk3I.js} +62 -8
- package/dist/rents.server.js +4 -4
- package/dist/rents.server.mjs +4 -4
- package/dist/spots.server.js +162 -8
- package/dist/spots.server.mjs +162 -8
- package/dist/style.css +27 -4
- package/dist/wallet.server.js +2 -2
- package/dist/wallet.server.mjs +2 -2
- package/package.json +1 -1
- package/src/builder/rspack/rspack.config.base.js +1 -1
- package/src/builder/rspack/rspack.config.client.js +13 -5
- package/src/components/Select/Select.vue +4 -2
- package/src/modules/auth/models/user.model.js +4 -1
- package/src/modules/community/components/sections/HotPosts.vue +1 -1
- package/src/modules/globals/controllers/classes/globals.abac.js +148 -23
- package/src/modules/globals/controllers/classes/globals.validator.js +37 -0
- package/src/modules/globals/controllers/classes/globals.verifier.js +2 -0
- package/src/modules/globals/controllers/policies/globals.policies.js +91 -74
- package/src/modules/globals/controllers/utils/queryProcessor.js +59 -11
- package/src/modules/globals/models/schemas/ownership.schema.js +11 -6
- package/src/modules/globals/models/schemas/profile.schema.js +0 -4
- package/src/modules/music/components/layouts/MusicLayout.vue +10 -58
- package/src/modules/music/components/pages/MusicHome.vue +5 -5
- package/src/modules/orders/components/pages/OrderCreate.vue +85 -12
- package/src/modules/orders/controllers/orders.controller.js +3 -0
- package/src/modules/orders/store/shopcart.js +1 -0
- package/src/modules/organizations/models/schemas/accesses.schema.js +18 -0
- package/src/modules/organizations/policies/organizations.policies.js +117 -61
- package/src/modules/products/components/pages/CategoryEdit.vue +27 -2
- package/src/modules/products/components/pages/Product.vue +1 -0
- package/src/modules/products/components/pages/ProductEdit.vue +2 -2
- package/src/modules/products/controllers/categories.controller.js +297 -133
- package/src/modules/products/middlewares/categories.verifier.js +177 -0
- package/src/modules/products/models/category.model.js +12 -14
- package/src/modules/products/routes/categories.routes.js +50 -11
- package/src/modules/products/store/categories.js +2 -0
- package/src/modules/spots/components/pages/SpotEdit.vue +21 -17
- package/src/modules/spots/components/sections/WorktimeEdit.vue +840 -0
- package/src/modules/spots/controllers/queries/getIsOpenNowStage.js +109 -0
- package/src/modules/spots/controllers/spots.controller.js +2 -1
- package/src/modules/spots/models/spot.model.js +59 -13
- package/src/modules/spots/store/spots.js +4 -1
- package/src/modules/products/middlewares/index.js +0 -11
- 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
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
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
|
}
|
|
@@ -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"
|