UNPKG

@superawesome/permissions

Version:

Fine grained permissions / access control with ownerships & attribute picking, done right.

75 lines 4.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.limitOwned_DocsOfMeAndMyCompanyUsers = exports.listOwned_DocsOfMeAndMyCompanyUsers = exports.isOwner_isDocCreatedByMeAndMyCompanyUsers = exports.listDocsOfMeAndMyCompanyUsers = exports.limitOwned_DocsOfMeAndMyManagedUsers = exports.listOwned_DocsOfMeAndMyManagedUsers = exports.isOwner_isDocCreatedByMeAndMyManagedUsers = exports.listDocsOfMeAndMyManagedUsers = exports.limitOwned_listUserCreatedDocuments = exports.listOwned_listUserCreatedDocuments = exports.isOwner_isUserCreatorOfDocument = exports.listUserCreatedDocuments = exports.isUserCreatorOfDocument = exports.USER_BELONGS_TO_ONE_COMPANY = exports.USER_MANAGES_MANY_USERS = exports.ALL_DOCUMENTS = exports.ALL_DOCUMENTS_IDS = exports.USER_CREATED_DOCUMENTS = exports.USERS = void 0; /* eslint-disable @typescript-eslint/camelcase */ // Our "Database" const _f = require("lodash/fp"); const _ = require("lodash"); exports.USERS = { employee1: { id: 1, roles: ['EMPLOYEE'] }, employeeManager2: { id: 2, roles: ['EMPLOYEE_MANAGER'] }, qaManager3: { id: 3, roles: ['QA_MANAGER'] }, companyAdmin4: { id: 4, roles: ['COMPANY_ADMIN'] }, superAdmin5: { id: 5, roles: ['SUPER_ADMIN'] }, god6: { id: 6, roles: ['GOD'] }, managerAndCompanyAdmin7: { id: 7, roles: ['EMPLOYEE_MANAGER', 'COMPANY_ADMIN'] }, employeeAndSuperAdmin8: { id: 8, roles: ['EMPLOYEE', 'SUPER_ADMIN'] }, }; exports.USER_CREATED_DOCUMENTS = { // userId: documentId[] 1: [1, 10, 100], 2: [2, 20, 200], 3: [3, 30, 300], 4: [4, 40, 400], 5: [5, 50, 500], 6: [6, 60, 600], 7: [7, 70, 700], 8: [8, 80, 800], }; exports.ALL_DOCUMENTS_IDS = _f.flow(_f.values, _f.flatten)(exports.USER_CREATED_DOCUMENTS); exports.ALL_DOCUMENTS = _.flatten(_.values(exports.USER_CREATED_DOCUMENTS)).map((id) => ({ id, title: `Document Title ${id}`, date: `2020-02-0${[`${id}`][0]}`, someRandomField: `Some random value ${id}`, confidential: `Confidential ${id}`, })); exports.USER_MANAGES_MANY_USERS = { // userId: userId[] 2: [1, 4], 3: [2, 5], 7: [5, 6], }; exports.USER_BELONGS_TO_ONE_COMPANY = { // userId: companyId 1: 1, 2: 1, 3: 1, 4: 2, 5: 2, 6: 2, 7: 1, }; // Ownership if I am the direct document creator exports.isUserCreatorOfDocument = ({ user, resourceId }) => (exports.USER_CREATED_DOCUMENTS[user.id] || []).includes(resourceId); exports.listUserCreatedDocuments = async (user) => exports.USER_CREATED_DOCUMENTS[user.id] || []; exports.isOwner_isUserCreatorOfDocument = async ({ user, resourceId }) => exports.isUserCreatorOfDocument({ user, resourceId }); exports.listOwned_listUserCreatedDocuments = async (user) => exports.listUserCreatedDocuments(user); exports.limitOwned_listUserCreatedDocuments = ({ user, }) => (document) => (exports.USER_CREATED_DOCUMENTS[user.id] || []).includes(document.id); // Ownership if I am the document creator OR created by a user managed by me (i.e Employee Manager) exports.listDocsOfMeAndMyManagedUsers = (user) => [ ...(exports.USER_CREATED_DOCUMENTS[user.id] || []), ..._.flatten((exports.USER_MANAGES_MANY_USERS[user.id] || []).map((userId) => exports.USER_CREATED_DOCUMENTS[userId])), ]; exports.isOwner_isDocCreatedByMeAndMyManagedUsers = async ({ user, resourceId }) => exports.listDocsOfMeAndMyManagedUsers(user).includes(resourceId); exports.listOwned_DocsOfMeAndMyManagedUsers = async (user) => exports.listDocsOfMeAndMyManagedUsers(user); exports.limitOwned_DocsOfMeAndMyManagedUsers = ({ user, }) => (document) => exports.listDocsOfMeAndMyManagedUsers(user).includes(document.id); // Ownership if I am the Document creator OR created by a User in my Company (i.e Company Admin) exports.listDocsOfMeAndMyCompanyUsers = (user) => { const companyId = exports.USER_BELONGS_TO_ONE_COMPANY[user.id]; return _.flow(_f.pickBy(_f.isEqual(companyId)), _f.keys, _f.map((userId) => exports.USER_CREATED_DOCUMENTS[userId]), _f.flatten, _f.uniq)(exports.USER_BELONGS_TO_ONE_COMPANY); }; exports.isOwner_isDocCreatedByMeAndMyCompanyUsers = async ({ user, resourceId }) => exports.listDocsOfMeAndMyCompanyUsers(user).includes(resourceId); exports.listOwned_DocsOfMeAndMyCompanyUsers = async (user) => exports.listDocsOfMeAndMyCompanyUsers(user); exports.limitOwned_DocsOfMeAndMyCompanyUsers = ({ user, }) => (document) => exports.listDocsOfMeAndMyCompanyUsers(user).includes(document.id); //# sourceMappingURL=data.fixtures.js.map