Skip to content

Commit 83c5a22

Browse files
fix(pass): DOMA-11223 get only permitted employees for sending push in pass miniapp (#5903)
* fix(pass): DOMA-11223 get only permitted employees for sending push in pass miniapp * chore(condo): DOMA-11223 recreate migration after rebase * fix(condo): DOMA-11223 query B2BAppRole without employee role in test * chore(pass): DOMA-11223 update submodule to main
1 parent 93f6459 commit 83c5a22

File tree

10 files changed

+136
-6
lines changed

10 files changed

+136
-6
lines changed

apps/condo/domains/miniapp/gql.js

+4
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ const B2BAppPromoBlock = generateGqlQueries('B2BAppPromoBlock', B2B_APP_PROMO_BL
7070
const B2B_APP_ROLE_FIELDS = `{ app { id } role { id } permissions ${COMMON_FIELDS} }`
7171
const B2BAppRole = generateGqlQueries('B2BAppRole', B2B_APP_ROLE_FIELDS)
7272

73+
const B2B_APP_ROLE_WITHOUT_EMPLOYEE_ROLE_FIELDS = `{ app { id } permissions ${COMMON_FIELDS} }`
74+
const B2BAppRoleWithoutEmployeeRole = generateGqlQueries('B2BAppRole', B2B_APP_ROLE_WITHOUT_EMPLOYEE_ROLE_FIELDS)
75+
7376
const MESSAGE_APP_BLACK_LIST_FIELDS = `{ app { id } description ${COMMON_FIELDS} }`
7477
const MessageAppBlackList = generateGqlQueries('MessageAppBlackList', MESSAGE_APP_BLACK_LIST_FIELDS)
7578

@@ -115,5 +118,6 @@ module.exports = {
115118
B2BAccessTokenReadonlyAdmin,
116119
AppMessageSetting,
117120
SEND_B2B_APP_PUSH_MESSAGE_MUTATION,
121+
B2BAppRoleWithoutEmployeeRole,
118122
/* AUTOGENERATE MARKER <EXPORTS> */
119123
}

apps/condo/domains/miniapp/schema/B2BAppAccessRightSet.test.js

+2
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,8 @@ describe('B2BApp permissions for service user', () => {
542542
expect(foundRight).toHaveProperty('accessRightSet.canReadTicketCommentFiles', false)
543543
expect(foundRight).toHaveProperty('accessRightSet.canReadTicketCommentFiles', false)
544544
expect(foundRight).toHaveProperty('accessRightSet.canExecuteSendB2BAppPushMessage', false)
545+
expect(foundRight).toHaveProperty('accessRightSet.canReadOrganizationEmployeeRoles', false)
546+
expect(foundRight).toHaveProperty('accessRightSet.canManageOrganizationEmployeeRoles', false)
545547
})
546548

547549
describe('Bulk-operations', () => {

apps/condo/domains/miniapp/schema/B2BAppRole.test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ const {
1616
waitFor,
1717
} = require('@open-condo/keystone/test.utils')
1818

19-
const { NOT_FOUND } = require('@condo/domains/common/constants/errors')
2019
const {
2120
B2BAppRole,
21+
B2BAppRoleWithoutEmployeeRole,
2222
createTestB2BAppRole,
2323
updateTestB2BAppRole,
2424
createTestB2BApp,
@@ -252,7 +252,7 @@ describe('B2BAppRole', () => {
252252
await createTestB2BAppContext(manager, anotherApp, manager.organization)
253253
const [anotherAppRole] = await createTestB2BAppRole(manager, anotherApp, employee.role)
254254

255-
const roles = await B2BAppRole.getAll(serviceUser, { id_in: [role.id, anotherRole.id, anotherAppRole.id] })
255+
const roles = await B2BAppRoleWithoutEmployeeRole.getAll(serviceUser, { id_in: [role.id, anotherRole.id, anotherAppRole.id] })
256256
expect(roles).toHaveLength(2)
257257
expect(roles).toEqual(expect.arrayContaining([
258258
expect.objectContaining({ id: role.id }),

apps/condo/domains/miniapp/utils/b2bAppServiceUserAccess/config.js

+3
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ const B2B_APP_SERVICE_USER_ACCESS_AVAILABLE_SCHEMAS = {
7777
OrganizationEmployee: {
7878
canBeManaged: false,
7979
},
80+
OrganizationEmployeeRole: {
81+
canBeManaged: false,
82+
},
8083

8184
// Property domain
8285
Property: {},

apps/condo/domains/miniapp/utils/testSchema/index.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const {
2929
} = require('@condo/domains/miniapp/gql')
3030
const { MessageAppBlackList: MessageAppBlackListGQL } = require('@condo/domains/miniapp/gql')
3131
const { B2BAppPermission: B2BAppPermissionGQL } = require('@condo/domains/miniapp/gql')
32-
const { B2BAppRole: B2BAppRoleGQL } = require('@condo/domains/miniapp/gql')
32+
const { B2BAppRole: B2BAppRoleGQL, B2BAppRoleWithoutEmployeeRole: B2BAppRoleWithoutEmployeeRoleGQL } = require('@condo/domains/miniapp/gql')
3333
const { B2BAppAccessRightSet: B2BAppAccessRightSetGQL } = require('@condo/domains/miniapp/gql')
3434
const { B2BAppNewsSharingConfig: B2BAppNewsSharingConfigGQL } = require('@condo/domains/miniapp/gql')
3535
const { B2BAccessToken: B2BAccessTokenGQL } = require('@condo/domains/miniapp/gql')
@@ -67,6 +67,7 @@ const B2BAppPromoBlock = generateGQLTestUtils(B2BAppPromoBlockGQL)
6767
const MessageAppBlackList = generateGQLTestUtils(MessageAppBlackListGQL)
6868
const B2BAppPermission = generateGQLTestUtils(B2BAppPermissionGQL)
6969
const B2BAppRole = generateGQLTestUtils(B2BAppRoleGQL)
70+
const B2BAppRoleWithoutEmployeeRole = generateGQLTestUtils(B2BAppRoleWithoutEmployeeRoleGQL)
7071
const B2BAppAccessRightSet = generateGQLTestUtils(B2BAppAccessRightSetGQL)
7172
const B2BAppNewsSharingConfig = generateGQLTestUtils(B2BAppNewsSharingConfigGQL)
7273
const AppMessageSetting = generateGQLTestUtils(AppMessageSettingGQL)
@@ -692,7 +693,7 @@ module.exports = {
692693
B2CAppProperty, createTestB2CAppProperty, updateTestB2CAppProperty,
693694
sendB2CAppPushMessageByTestClient,
694695
MessageAppBlackList, createTestMessageAppBlackList, updateTestMessageAppBlackList,
695-
B2BAppRole, createTestB2BAppRole, updateTestB2BAppRole,
696+
B2BAppRole, B2BAppRoleWithoutEmployeeRole, createTestB2BAppRole, updateTestB2BAppRole,
696697
B2BAppAccessRightSet, createTestB2BAppAccessRightSet, updateTestB2BAppAccessRightSet,
697698
B2BAppNewsSharingConfig, createTestB2BAppNewsSharingConfig, updateTestB2BAppNewsSharingConfig,
698699
sendB2BAppPushMessageByTestClient,

apps/condo/domains/organization/access/OrganizationEmployeeRole.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,26 @@ const get = require('lodash/get')
66
const { throwAuthenticationError } = require('@open-condo/keystone/apolloErrorFormatter')
77
const { getById } = require('@open-condo/keystone/schema')
88

9+
const { canReadObjectsAsB2BAppServiceUser } = require('@condo/domains/miniapp/utils/b2bAppServiceUserAccess')
910
const {
1011
getEmployedOrRelatedOrganizationsByPermissions,
1112
checkPermissionsInEmployedOrRelatedOrganizations,
1213
} = require('@condo/domains/organization/utils/accessSchema')
14+
const { SERVICE } = require('@condo/domains/user/constants/common')
1315

1416

15-
async function canReadOrganizationEmployeeRoles ({ authentication: { item: user }, context }) {
17+
async function canReadOrganizationEmployeeRoles (args) {
18+
const { authentication: { item: user }, context } = args
19+
1620
if (!user) return throwAuthenticationError()
1721
if (user.deletedAt) return false
1822

1923
if (user.isSupport || user.isAdmin) return {}
2024

25+
if (user.type === SERVICE) {
26+
return await canReadObjectsAsB2BAppServiceUser(args)
27+
}
28+
2129
const permittedOrganizations = await getEmployedOrRelatedOrganizationsByPermissions(context, user, [])
2230

2331
return {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// auto generated by kmigrator
2+
// KMIGRATOR:0460_auto_20250313_0459:IyBHZW5lcmF0ZWQgYnkgRGphbmdvIDMuMi41IG9uIDIwMjUtMDMtMTMgMDQ6NTkKCmZyb20gZGphbmdvLmRiIGltcG9ydCBtaWdyYXRpb25zLCBtb2RlbHMKCgpjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgoKICAgIGRlcGVuZGVuY2llcyA9IFsKICAgICAgICAoJ19kamFuZ29fc2NoZW1hJywgJzA0NTlfYXV0b18yMDI1MDMxMF8xNDQ4JyksCiAgICBdCgogICAgb3BlcmF0aW9ucyA9IFsKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdiMmJhcHBhY2Nlc3NyaWdodHNldCcsCiAgICAgICAgICAgIG5hbWU9J2Nhbk1hbmFnZU9yZ2FuaXphdGlvbkVtcGxveWVlUm9sZXMnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nYjJiYXBwYWNjZXNzcmlnaHRzZXQnLAogICAgICAgICAgICBuYW1lPSdjYW5SZWFkT3JnYW5pemF0aW9uRW1wbG95ZWVSb2xlcycsCiAgICAgICAgICAgIGZpZWxkPW1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSksCiAgICAgICAgKSwKICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAogICAgICAgICAgICBtb2RlbF9uYW1lPSdiMmJhcHBhY2Nlc3NyaWdodHNldGhpc3RvcnlyZWNvcmQnLAogICAgICAgICAgICBuYW1lPSdjYW5NYW5hZ2VPcmdhbml6YXRpb25FbXBsb3llZVJvbGVzJywKICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkJvb2xlYW5GaWVsZChibGFuaz1UcnVlLCBudWxsPVRydWUpLAogICAgICAgICksCiAgICAgICAgbWlncmF0aW9ucy5BZGRGaWVsZCgKICAgICAgICAgICAgbW9kZWxfbmFtZT0nYjJiYXBwYWNjZXNzcmlnaHRzZXRoaXN0b3J5cmVjb3JkJywKICAgICAgICAgICAgbmFtZT0nY2FuUmVhZE9yZ2FuaXphdGlvbkVtcGxveWVlUm9sZXMnLAogICAgICAgICAgICBmaWVsZD1tb2RlbHMuQm9vbGVhbkZpZWxkKGJsYW5rPVRydWUsIG51bGw9VHJ1ZSksCiAgICAgICAgKSwKICAgIF0K
3+
4+
exports.up = async (knex) => {
5+
await knex.raw(`
6+
BEGIN;
7+
--
8+
-- Add field canManageOrganizationEmployeeRoles to b2bappaccessrightset
9+
--
10+
ALTER TABLE "B2BAppAccessRightSet" ADD COLUMN "canManageOrganizationEmployeeRoles" boolean DEFAULT false NOT NULL;
11+
ALTER TABLE "B2BAppAccessRightSet" ALTER COLUMN "canManageOrganizationEmployeeRoles" DROP DEFAULT;
12+
--
13+
-- Add field canReadOrganizationEmployeeRoles to b2bappaccessrightset
14+
--
15+
ALTER TABLE "B2BAppAccessRightSet" ADD COLUMN "canReadOrganizationEmployeeRoles" boolean DEFAULT false NOT NULL;
16+
ALTER TABLE "B2BAppAccessRightSet" ALTER COLUMN "canReadOrganizationEmployeeRoles" DROP DEFAULT;
17+
--
18+
-- Add field canManageOrganizationEmployeeRoles to b2bappaccessrightsethistoryrecord
19+
--
20+
ALTER TABLE "B2BAppAccessRightSetHistoryRecord" ADD COLUMN "canManageOrganizationEmployeeRoles" boolean NULL;
21+
--
22+
-- Add field canReadOrganizationEmployeeRoles to b2bappaccessrightsethistoryrecord
23+
--
24+
ALTER TABLE "B2BAppAccessRightSetHistoryRecord" ADD COLUMN "canReadOrganizationEmployeeRoles" boolean NULL;
25+
COMMIT;
26+
27+
`)
28+
}
29+
30+
exports.down = async (knex) => {
31+
await knex.raw(`
32+
BEGIN;
33+
--
34+
-- Add field canReadOrganizationEmployeeRoles to b2bappaccessrightsethistoryrecord
35+
--
36+
ALTER TABLE "B2BAppAccessRightSetHistoryRecord" DROP COLUMN "canReadOrganizationEmployeeRoles" CASCADE;
37+
--
38+
-- Add field canManageOrganizationEmployeeRoles to b2bappaccessrightsethistoryrecord
39+
--
40+
ALTER TABLE "B2BAppAccessRightSetHistoryRecord" DROP COLUMN "canManageOrganizationEmployeeRoles" CASCADE;
41+
--
42+
-- Add field canReadOrganizationEmployeeRoles to b2bappaccessrightset
43+
--
44+
ALTER TABLE "B2BAppAccessRightSet" DROP COLUMN "canReadOrganizationEmployeeRoles" CASCADE;
45+
--
46+
-- Add field canManageOrganizationEmployeeRoles to b2bappaccessrightset
47+
--
48+
ALTER TABLE "B2BAppAccessRightSet" DROP COLUMN "canManageOrganizationEmployeeRoles" CASCADE;
49+
COMMIT;
50+
51+
`)
52+
}

apps/condo/schema.graphql

+31
Original file line numberDiff line numberDiff line change
@@ -72429,6 +72429,8 @@ type B2BAppAccessRightSetHistoryRecord {
7242972429
canManageOrganizations: Boolean
7243072430
canReadOrganizationEmployees: Boolean
7243172431
canManageOrganizationEmployees: Boolean
72432+
canReadOrganizationEmployeeRoles: Boolean
72433+
canManageOrganizationEmployeeRoles: Boolean
7243272434
canReadProperties: Boolean
7243372435
canManageProperties: Boolean
7243472436
canReadTickets: Boolean
@@ -72532,6 +72534,10 @@ input B2BAppAccessRightSetHistoryRecordWhereInput {
7253272534
canReadOrganizationEmployees_not: Boolean
7253372535
canManageOrganizationEmployees: Boolean
7253472536
canManageOrganizationEmployees_not: Boolean
72537+
canReadOrganizationEmployeeRoles: Boolean
72538+
canReadOrganizationEmployeeRoles_not: Boolean
72539+
canManageOrganizationEmployeeRoles: Boolean
72540+
canManageOrganizationEmployeeRoles_not: Boolean
7253572541
canReadProperties: Boolean
7253672542
canReadProperties_not: Boolean
7253772543
canManageProperties: Boolean
@@ -72677,6 +72683,10 @@ enum SortB2BAppAccessRightSetHistoryRecordsBy {
7267772683
canReadOrganizationEmployees_DESC
7267872684
canManageOrganizationEmployees_ASC
7267972685
canManageOrganizationEmployees_DESC
72686+
canReadOrganizationEmployeeRoles_ASC
72687+
canReadOrganizationEmployeeRoles_DESC
72688+
canManageOrganizationEmployeeRoles_ASC
72689+
canManageOrganizationEmployeeRoles_DESC
7268072690
canReadProperties_ASC
7268172691
canReadProperties_DESC
7268272692
canManageProperties_ASC
@@ -72741,6 +72751,8 @@ input B2BAppAccessRightSetHistoryRecordUpdateInput {
7274172751
canManageOrganizations: Boolean
7274272752
canReadOrganizationEmployees: Boolean
7274372753
canManageOrganizationEmployees: Boolean
72754+
canReadOrganizationEmployeeRoles: Boolean
72755+
canManageOrganizationEmployeeRoles: Boolean
7274472756
canReadProperties: Boolean
7274572757
canManageProperties: Boolean
7274672758
canReadTickets: Boolean
@@ -72793,6 +72805,8 @@ input B2BAppAccessRightSetHistoryRecordCreateInput {
7279372805
canManageOrganizations: Boolean
7279472806
canReadOrganizationEmployees: Boolean
7279572807
canManageOrganizationEmployees: Boolean
72808+
canReadOrganizationEmployeeRoles: Boolean
72809+
canManageOrganizationEmployeeRoles: Boolean
7279672810
canReadProperties: Boolean
7279772811
canManageProperties: Boolean
7279872812
canReadTickets: Boolean
@@ -72880,6 +72894,11 @@ type B2BAppAccessRightSet {
7288072894
""" Currently, this field is read-only. You cannot get manage access for the specified schema.
7288172895
"""
7288272896
canManageOrganizationEmployees: Boolean
72897+
canReadOrganizationEmployeeRoles: Boolean
72898+
72899+
""" Currently, this field is read-only. You cannot get manage access for the specified schema.
72900+
"""
72901+
canManageOrganizationEmployeeRoles: Boolean
7288372902
canReadProperties: Boolean
7288472903
canManageProperties: Boolean
7288572904
canReadTickets: Boolean
@@ -72975,6 +72994,10 @@ input B2BAppAccessRightSetWhereInput {
7297572994
canReadOrganizationEmployees_not: Boolean
7297672995
canManageOrganizationEmployees: Boolean
7297772996
canManageOrganizationEmployees_not: Boolean
72997+
canReadOrganizationEmployeeRoles: Boolean
72998+
canReadOrganizationEmployeeRoles_not: Boolean
72999+
canManageOrganizationEmployeeRoles: Boolean
73000+
canManageOrganizationEmployeeRoles_not: Boolean
7297873001
canReadProperties: Boolean
7297973002
canReadProperties_not: Boolean
7298073003
canManageProperties: Boolean
@@ -73102,6 +73125,10 @@ enum SortB2BAppAccessRightSetsBy {
7310273125
canReadOrganizationEmployees_DESC
7310373126
canManageOrganizationEmployees_ASC
7310473127
canManageOrganizationEmployees_DESC
73128+
canReadOrganizationEmployeeRoles_ASC
73129+
canReadOrganizationEmployeeRoles_DESC
73130+
canManageOrganizationEmployeeRoles_ASC
73131+
canManageOrganizationEmployeeRoles_DESC
7310573132
canReadProperties_ASC
7310673133
canReadProperties_DESC
7310773134
canManageProperties_ASC
@@ -73166,6 +73193,8 @@ input B2BAppAccessRightSetUpdateInput {
7316673193
canManageOrganizations: Boolean
7316773194
canReadOrganizationEmployees: Boolean
7316873195
canManageOrganizationEmployees: Boolean
73196+
canReadOrganizationEmployeeRoles: Boolean
73197+
canManageOrganizationEmployeeRoles: Boolean
7316973198
canReadProperties: Boolean
7317073199
canManageProperties: Boolean
7317173200
canReadTickets: Boolean
@@ -73215,6 +73244,8 @@ input B2BAppAccessRightSetCreateInput {
7321573244
canManageOrganizations: Boolean
7321673245
canReadOrganizationEmployees: Boolean
7321773246
canManageOrganizationEmployees: Boolean
73247+
canReadOrganizationEmployeeRoles: Boolean
73248+
canManageOrganizationEmployeeRoles: Boolean
7321873249
canReadProperties: Boolean
7321973250
canManageProperties: Boolean
7322073251
canReadTickets: Boolean

0 commit comments

Comments
 (0)