import { shield, allow, or } from 'nexus-plugin-shield' import { isAdmin, isManager, isResident, isProvider } from './rules' import { logger } from './utils/logger' let rules = {} if (process.env.SHIELD_FEATURE === 'true') { logger.info('shield permissions on') rules = { Mutation: { captureResidentEmailOnSignup: or(isAdmin, isResident), captureResidentInformationsOnSignup: or(isAdmin), createAccessKey: or(isAdmin, isManager), createAccountStatement: or(isAdmin), createAd: or(isAdmin, isResident, isManager), createAdditionalService: or(isAdmin), createAddon: or(isAdmin), createAddonItem: or(isAdmin), createAddress: or(isAdmin), createAmenity: or(isAdmin, isManager), createAmenityBookingOption: or(isAdmin), createAmenityPaymentOption: or(isAdmin), createBooking: or(isAdmin), createBuilding: or(isAdmin), createBusinessHours: or(isAdmin), createCar: or(isAdmin), createChosenModel: or(isAdmin), createComment: or(isAdmin, isManager), createCondition: or(isAdmin), createCondoManagerCompte: or(isAdmin), createContact: or(isAdmin, isManager), createContactPerson: or(isAdmin), createCreditCard: or(isAdmin), createCustomField: or(isAdmin), createEvent: or(isAdmin, isManager), createFaqItem: or(isAdmin), createFile: or(isAdmin), createFolder: or(isAdmin, isManager), createInvoice: or(isAdmin), createIssue: or(isAdmin), createLineItem: or(isAdmin), createLocker: or(isAdmin, isManager), createManagerStoreItem: or(isAdmin, isManager), createManagerStoreOrder: or(isAdmin), createManagerStoreOrderLineItem: or(isAdmin), createManagingCompany: or(isAdmin, isManager), createManagingCompanyRole: or(isAdmin, isManager), createMappedService: or(isAdmin), createMappedServiceSettings: or(isAdmin), createMapping: or(isAdmin), createMeeting: or(isAdmin), createMeetingActivity: or(isAdmin), createMeetingParticipant: or(isAdmin), createMeetingParticipantUnit: or(isAdmin), createNote: or(isAdmin, isManager), createNoteComment: or(isAdmin), createNotification: or(isAdmin), createNotificationPreference: or(isAdmin), createOffense: or(isAdmin, isManager), createOffenseCategory: or(isAdmin), createOption: or(isAdmin, isManager, isProvider), createOptionCategory: or(isAdmin), createOrder: or(isAdmin, isResident), createOrderSubscription: or(isAdmin), createOrderV2: or(isAdmin), createPackage: or(isAdmin, isManager), createParking: or(isAdmin, isManager), createPayment: or(isAdmin), createPaymentAccount: or(isAdmin), createPaymentMethod: or(isAdmin, isResident), createPaySafePayment: or(isAdmin), createPaySafeRefund: or(isAdmin), createPhone: or(isAdmin), createPicture: or(isAdmin), createPoll: or(isAdmin), createPollQuestion: or(isAdmin), createPollQuestionAnswer: or(isAdmin), createPost: or(isAdmin, isManager), createProject: or(isAdmin, isManager, isManager), createPromoCode: or(isAdmin, isManager), createProperty: or(isAdmin, isManager), createRegistrantsOnZoom: or(isAdmin), createReminder: or(isAdmin), createRemote: or(isAdmin, isManager), createReservation: or(isAdmin, isResident, isManager), createReview: or(isAdmin, isResident), createRoomModel: or(isAdmin), createRule: or(isAdmin, isManager), createSegment: or(isAdmin, isManager), createSegmentField: or(isAdmin), createSendbirdUser: or(isAdmin, isManager), createService: or(isAdmin), createServiceProject: or(isAdmin), createServiceRequest: or(isAdmin, isManager), createServiceRequestCategory: or(isAdmin), createServiceRequestPriority: or(isAdmin), createShippingLine: or(isAdmin), createSyncStatus: or(isAdmin), createTask: or(isAdmin, isResident, isManager), createTaskActivity: or(isAdmin), createTaskCategory: or(isAdmin, isManager), createTaskStatus: or(isAdmin, isManager), createTax: or(isAdmin), createThirdPartyVersion: or(isAdmin), createUnitRoom: or(isAdmin, isManager), createUser: or(isAdmin, isResident, isManager, isProvider), deleteAccessKey: or(isAdmin, isManager), deleteAccountStatement: or(isAdmin), deleteAd: or(isAdmin, isResident, isManager), deleteAdditionalService: or(isAdmin), deleteAddon: or(isAdmin), deleteAddonItem: or(isAdmin), deleteAddress: or(isAdmin), deleteAmenity: or(isAdmin, isManager), deleteAmenityBookingOption: or(isAdmin), deleteAmenityPaymentOption: or(isAdmin), deleteBooking: or(isAdmin), deleteBuilding: or(isAdmin), deleteBusinessHours: or(isAdmin), deleteCar: or(isAdmin), deleteChosenModel: or(isAdmin), deleteComment: or(isAdmin), deleteCondition: or(isAdmin), deleteCondoManagerCompte: or(isAdmin), deleteContact: or(isAdmin, isManager), deleteContactPerson: or(isAdmin), deleteCreditCard: or(isAdmin), deleteCustomField: or(isAdmin), deleteEvent: or(isAdmin, isManager), deleteFaqItem: or(isAdmin), deleteFile: or(isAdmin, isManager), deleteFolder: or(isAdmin, isManager), deleteInvoice: or(isAdmin), deleteIssue: or(isAdmin), deleteLineItem: or(isAdmin), deleteLocker: or(isAdmin, isManager), deleteManagerStoreItem: or(isAdmin, isManager), deleteManagerStoreOrder: or(isAdmin), deleteManagerStoreOrderLineItem: or(isAdmin), deleteManagingCompany: or(isAdmin), deleteManagingCompanyRole: or(isAdmin, isManager), deleteMappedService: or(isAdmin), deleteMappedServiceSettings: or(isAdmin), deleteMapping: or(isAdmin), deleteMeeting: or(isAdmin), deleteMeetingActivity: or(isAdmin), deleteMeetingParticipant: or(isAdmin), deleteMeetingParticipantUnit: or(isAdmin), deleteNote: or(isAdmin, isManager), deleteNoteComment: or(isAdmin), deleteNotification: or(isAdmin), deleteNotificationPreference: or(isAdmin), deleteOffense: or(isAdmin), deleteOffenseCategory: or(isAdmin), deleteOption: or(isAdmin, isManager, isProvider), deleteOptionCategory: or(isAdmin), deleteOrder: or(isAdmin, isManager), deleteOrderSubscription: or(isAdmin), deletePackage: or(isAdmin, isManager), deleteParking: or(isAdmin, isManager), deletePayment: or(isAdmin), deletePaymentAccount: or(isAdmin), deletePaymentMethod: or(isAdmin, isResident), deletePaySafePayment: or(isAdmin), deletePaySafeRefund: or(isAdmin), deletePhone: or(isAdmin), deletePicture: or(isAdmin), deletePoll: or(isAdmin), deletePollQuestion: or(isAdmin), deletePollQuestionAnswer: or(isAdmin), deletePost: or(isAdmin, isManager), deleteProject: or(isAdmin, isManager), deletePromoCode: or(isAdmin, isManager), deleteProperty: or(isAdmin, isManager), deleteReminder: or(isAdmin), deleteRemote: or(isAdmin, isManager), deleteReservation: or(isAdmin, isManager), deleteReview: or(isAdmin), deleteRoomModel: or(isAdmin), deleteRule: or(isAdmin, isManager), deleteSegment: or(isAdmin, isManager), deleteSegmentField: or(isAdmin), deleteService: or(isAdmin), deleteServiceProject: or(isAdmin), deleteServiceRequest: or(isAdmin), deleteServiceRequestCategory: or(isAdmin), deleteServiceRequestPriority: or(isAdmin), deleteShippingLine: or(isAdmin), deleteSyncStatus: or(isAdmin), deleteTask: or(isAdmin, isManager), deleteTaskActivity: or(isAdmin), deleteTaskCategory: or(isAdmin, isManager), deleteTaskStatus: or(isAdmin, isManager), deleteTax: or(isAdmin), deleteThirdPartyVersion: or(isAdmin), deleteUnitRoom: or(isAdmin, isManager), deleteUser: or(isAdmin, isResident, isManager, isProvider), emailIsAlreadyTaken: or(isAdmin), endPoll: or(isAdmin), forgotPassword: or(isAdmin, isResident, isManager, isProvider), getAndVerifyPromoCodeForCurrentUser: or(isAdmin, isResident), inviteUninstalled: or(isAdmin, isManager), inviteUninvited: or(isAdmin, isManager), isUserHasBeenApproved: or(isAdmin, isResident), removeResidentFromProject: or(isAdmin, isManager), resetPoll: or(isAdmin), residentBookAmenity: or(isAdmin, isResident), sendInvitationToAllParticipant: or(isAdmin), sendInvitationToParticipant: or(isAdmin), sendInvite: or(isAdmin, isManager), sendOrder: or(isAdmin, isManager), sendPostPreview: or(isAdmin, isManager), startPoll: or(isAdmin), submitNewPassword: or(isAdmin), syncAllBusinessHoursWithFirstServiceProject: or(isAdmin, isManager), syncAllManagingCompanyProjectsWithCondoManager: or(isAdmin), syncProjectWithCondoManager: or(isAdmin), updateAccessKey: or(isAdmin, isManager), updateAccountStatement: or(isAdmin), updateAd: or(isAdmin, isResident, isManager), updateAdditionalService: or(isAdmin), updateAddon: or(isAdmin), updateAddonItem: or(isAdmin), updateAddress: or(isAdmin), updateAmenity: or(isAdmin, isResident, isManager), updateAmenityBookingOption: or(isAdmin), updateAmenityPaymentOption: or(isAdmin), updateBooking: or(isAdmin), updateBuilding: or(isAdmin), updateBusinessHours: or(isAdmin), updateCar: or(isAdmin), updateChosenModel: or(isAdmin), updateComment: or(isAdmin), updateCondition: or(isAdmin), updateCondoManagerCompte: or(isAdmin), updateContact: or(isAdmin, isResident, isManager), updateContactPerson: or(isAdmin), updateCreditCard: or(isAdmin), updateCurrentUser: or(isAdmin, isResident, isManager, isProvider), updateCustomField: or(isAdmin), updateEvent: or(isAdmin, isResident, isManager), updateFaqItem: or(isAdmin), updateFile: or(isAdmin, isManager), updateFolder: or(isAdmin, isResident, isManager), updateInvoice: or(isAdmin), updateIssue: or(isAdmin), updateLineItem: or(isAdmin), updateLocker: or(isAdmin, isManager), updateManagerStoreItem: or(isAdmin, isManager), updateManagerStoreOrder: or(isAdmin), updateManagerStoreOrderLineItem: or(isAdmin), updateManagingCompany: or(isAdmin, isManager), updateManagingCompanyRole: or(isAdmin, isManager), updateMappedService: or(isAdmin), updateMappedServiceSettings: or(isAdmin), updateMapping: or(isAdmin), updateMeeting: or(isAdmin), updateMeetingActivity: or(isAdmin), updateMeetingParticipant: or(isAdmin), updateMeetingParticipantUnit: or(isAdmin), updateNote: or(isAdmin, isManager), updateNoteComment: or(isAdmin), updateNotification: or(isAdmin, isResident, isManager, isProvider), updateNotificationPreference: or(isAdmin), updateOffense: or(isAdmin, isManager), updateOffenseCategory: or(isAdmin), updateOption: or(isAdmin, isManager, isProvider), updateOptionCategory: or(isAdmin), updateOrder: or(isAdmin, isResident, isManager, isProvider), updateOrderSubscription: or(isAdmin), updatePackage: or(isAdmin, isResident, isManager), updateParking: or(isAdmin, isManager), updatePayment: or(isAdmin), updatePaymentAccount: or(isAdmin), updatePaymentMethod: or(isAdmin, isResident), updatePaySafePayment: or(isAdmin), updatePaySafeRefund: or(isAdmin), updatePhone: or(isAdmin), updatePicture: or(isAdmin), updatePoll: or(isAdmin), updatePollQuestion: or(isAdmin), updatePollQuestionAnswer: or(isAdmin), updatePost: or(isAdmin, isResident, isManager), updateProject: or(isAdmin, isManager), updatePromoCode: or(isAdmin, isResident, isManager), updateProperty: or(isAdmin, isManager), updateReminder: or(isAdmin, isManager), updateRemote: or(isAdmin, isManager), updateReservation: or(isAdmin, isResident, isManager), updateReview: or(isAdmin), updateRoomModel: or(isAdmin), updateRule: or(isAdmin, isResident, isManager, isProvider), updateSegment: or(isAdmin, isManager), updateSegmentField: or(isAdmin), updateService: or(isAdmin, isManager, isProvider), updateServiceProject: or(isAdmin, isResident, isManager, isProvider), updateServiceRequest: or(isAdmin, isManager), updateServiceRequestCategory: or(isAdmin), updateServiceRequestPriority: or(isAdmin), updateShippingLine: or(isAdmin), updateSyncStatus: or(isAdmin), updateSyncStatusOfUser: or(isAdmin, isManager), updateTask: or(isAdmin, isManager), updateTaskActivity: or(isAdmin), updateTaskCategory: or(isAdmin, isManager), updateTaskStatus: or(isAdmin, isManager), updateTax: or(isAdmin), updateThirdPartyVersion: or(isAdmin), updateUnitRoom: or(isAdmin, isManager), updateUser: or(isAdmin, isResident, isManager), loginProvider: allow, signin: allow, signinAdmin: allow, signinApp: allow, signinResidentWeb: allow, registerProvider: allow, }, Query: { accessKey: or(isAdmin), accessKeys: or(isAdmin, isResident, isManager), accountStatement: or(isAdmin), accountStatements: or(isAdmin, isResident, isManager), ad: or(isAdmin), additionalService: or(isAdmin), additionalServices: or(isAdmin), addon: or(isAdmin), addonItem: or(isAdmin), addonItems: or(isAdmin), addons: or(isAdmin), address: or(isAdmin), addresses: or(isAdmin), ads: or(isAdmin, isResident, isManager), amenities: or(isAdmin, isResident, isManager), amenity: or(isAdmin, isResident, isManager), amenityBookingOptions: or(isAdmin), amenityPaymentOption: or(isAdmin), booking: or(isAdmin), bookings: or(isAdmin), building: or(isAdmin), buildings: or(isAdmin), businessHours: or(isAdmin), car: or(isAdmin), cars: or(isAdmin), chosenModel: or(isAdmin), chosenModels: or(isAdmin), comment: or(isAdmin), comments: or(isAdmin, isResident, isManager), condition: or(isAdmin), conditions: or(isAdmin), condoManagerCompte: or(isAdmin), condoManagerComptes: or(isAdmin), contact: or(isAdmin), contactPerson: or(isAdmin), contacts: or(isAdmin, isResident, isManager), creditCard: or(isAdmin), creditCards: or(isAdmin), customField: or(isAdmin), customFields: or(isAdmin), event: or(isAdmin, isResident), events: or(isAdmin, isResident, isManager), faqItem: or(isAdmin), faqItems: or(isAdmin), file: or(isAdmin), files: or(isAdmin), folder: or(isAdmin, isResident, isManager), folders: or(isAdmin, isResident, isManager), getAllResidentsForCurrentUser: or(isAdmin, isManager), getCurrentResidentMeetingParticipantForMeeting: or(isAdmin), getMeetingPollResults: or(isAdmin), getProxyDataForUserAndPost: or(isAdmin), getTimeSlotsForDay: or(isAdmin), invoice: or(isAdmin), invoices: or(isAdmin, isManager), isSigninAdmin: or(isAdmin, isManager), issue: or(isAdmin), issues: or(isAdmin), lineItem: or(isAdmin), lineItems: or(isAdmin), locker: or(isAdmin, isManager), lockers: or(isAdmin, isResident, isManager), managerStoreItem: or(isAdmin), managerStoreItems: or(isAdmin, isManager), managerStoreOrder: or(isAdmin), managerStoreOrderLineItem: or(isAdmin), managerStoreOrderLineItems: or(isAdmin), managerStoreOrders: or(isAdmin, isManager), managingCompanies: or(isAdmin, isManager), managingCompany: or(isAdmin, isResident, isManager), managingCompanyPendingActions: or(isAdmin, isResident, isManager), managingCompanyRole: or(isAdmin), managingCompanyRoles: or(isAdmin, isManager), mappedService: or(isAdmin), mappedServices: or(isAdmin), mappedServiceSettings: or(isAdmin), mapping: or(isAdmin), mappings: or(isAdmin), meeting: or(isAdmin), meetingActivities: or(isAdmin), meetingActivity: or(isAdmin), meetingParticipant: or(isAdmin), meetingParticipants: or(isAdmin), meetingParticipantUnit: or(isAdmin), meetingParticipantUnits: or(isAdmin), meetings: or(isAdmin, isResident), note: or(isAdmin), noteComment: or(isAdmin), noteComments: or(isAdmin), notes: or(isAdmin, isManager), notification: or(isAdmin), notificationPreference: or(isAdmin), notificationPreferences: or(isAdmin), notifications: or(isAdmin, isResident, isManager, isProvider), offense: or(isAdmin, isResident), offenseCategories: or(isAdmin), offenseCategory: or(isAdmin), offenses: or(isAdmin, isResident), option: or(isAdmin), optionCategories: or(isAdmin), optionCategory: or(isAdmin), options: or(isAdmin, isProvider), orderSubscription: or(isAdmin), orderSubscriptions: or(isAdmin), package: or(isAdmin, isResident, isManager), packages: or(isAdmin, isResident, isManager), parking: or(isAdmin), parkings: or(isAdmin, isResident, isManager), payment: or(isAdmin), paymentAccount: or(isAdmin), paymentAccounts: or(isAdmin), paymentMethod: or(isAdmin), paymentMethods: or(isAdmin), payments: or(isAdmin), paySafePayment: or(isAdmin), paySafePayments: or(isAdmin), paySafeRefund: or(isAdmin), paySafeRefunds: or(isAdmin), phone: or(isAdmin), phones: or(isAdmin), picture: or(isAdmin), pictures: or(isAdmin), poll: or(isAdmin), pollQuestion: or(isAdmin), pollQuestionAnswer: or(isAdmin), pollQuestionAnswers: or(isAdmin), pollQuestions: or(isAdmin), polls: or(isAdmin), post: or(isAdmin, isResident, isManager), posts: or(isAdmin, isResident, isManager), project: or(isAdmin, isManager), projects: or(isAdmin, isResident, isManager), promoCode: or(isAdmin), promoCodes: or(isAdmin, isManager, isProvider), properties: or(isAdmin, isResident, isManager), property: or(isAdmin, isResident, isManager), reminder: or(isAdmin), reminders: or(isAdmin), remote: or(isAdmin), remotes: or(isAdmin, isResident, isManager), reservation: or(isAdmin, isResident), reservations: or(isAdmin, isResident, isManager), resident: or(isAdmin, isResident, isManager), review: or(isAdmin), reviews: or(isAdmin, isResident, isManager), roomModel: or(isAdmin), roomModels: or(isAdmin), rule: or(isAdmin), rules: or(isAdmin, isResident, isManager), segment: or(isAdmin), segmentField: or(isAdmin), segmentFields: or(isAdmin), segments: or(isAdmin, isResident, isManager), serviceProject: or(isAdmin, isResident, isManager, isManager), serviceProjects: or(isAdmin, isResident, isManager, isManager, isProvider), serviceRequest: or(isAdmin, isManager), serviceRequestCategories: or(isAdmin), serviceRequestCategory: or(isAdmin), serviceRequestPriorities: or(isAdmin), serviceRequestPriority: or(isAdmin), serviceRequests: or(isAdmin, isManager), shippingLine: or(isAdmin), shippingLines: or(isAdmin), syncStatus: or(isAdmin), syncStatuses: or(isAdmin), task: or(isAdmin, isResident, isManager), taskActivities: or(isAdmin, isResident), taskActivity: or(isAdmin), taskCategories: or(isAdmin, isResident, isManager), taskCategory: or(isAdmin), tasks: or(isAdmin, isResident, isManager), taskStatus: or(isAdmin), taskStatuses: or(isAdmin, isResident, isManager), tax: or(isAdmin), taxes: or(isAdmin), thirdPartyVersion: or(isAdmin), thirdPartyVersions: or(isAdmin), unitRoom: or(isAdmin), unitRooms: or(isAdmin, isManager), user: or(isAdmin, isResident, isManager, isProvider), users: or(isAdmin, isResident, isManager, isProvider), usersCount: or(isAdmin, isManager), registerManagingCompany: allow, me: allow, order: allow, orders: allow, service: allow, services: allow, userWithEmailOrPhoneNumber: allow, }, } } else { rules = { Mutation: { '*': allow, // '*': or(isAdmin, isAuthenticated), signin: allow, loginProvider: allow, createProject: isManager, forgotPassword: allow, submitNewPassword: allow, createUser: allow, }, Query: { '*': allow, // '*': or(isAdmin, isAuthenticated), isSigninAdmin: allow, userWithEmailOrPhoneNumber: allow, me: allow, order: allow, orders: allow, service: allow, services: allow, }, } } export const permissions = shield({ rules: rules, options: { debug: true, }, })