'use strict'; const _ = require('lodash'); const { createAuthRequest } = require('../../../../../test/helpers/request'); const { createStrapiInstance } = require('../../../../../test/helpers/strapi'); const edition = process.env.STRAPI_DISABLE_EE === 'true' ? 'CE' : 'EE'; describe('Role CRUD End to End', () => { let rq; let strapi; beforeAll(async () => { strapi = await createStrapiInstance(); rq = await createAuthRequest({ strapi }); }); afterAll(async () => { await strapi.destroy(); }); test('Can get the existing permissions', async () => { let res = await rq({ url: '/admin/permissions', method: 'GET', }); expect(res.statusCode).toBe(200); // Data is sorted to avoid error with snapshot when the data is not in the same order const sortedData = _.cloneDeep(res.body.data); Object.keys(sortedData.sections).forEach(sectionName => { sortedData.sections[sectionName] = _.sortBy(sortedData.sections[sectionName], ['action']); }); sortedData.conditions = sortedData.conditions.sort(); if (edition === 'CE') { expect(sortedData).toMatchInlineSnapshot(` Object { "conditions": Array [ Object { "category": "default", "displayName": "Is creator", "id": "admin::is-creator", }, Object { "category": "default", "displayName": "Has same role as creator", "id": "admin::has-same-role-as-creator", }, ], "sections": Object { "collectionTypes": Array [ Array [ Object { "actionId": "plugins::content-manager.explorer.create", "applyToProperties": Array [ "fields", "locales", ], "label": "Create", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.read", "applyToProperties": Array [ "fields", "locales", ], "label": "Read", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.update", "applyToProperties": Array [ "fields", "locales", ], "label": "Update", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.delete", "applyToProperties": Array [ "locales", ], "label": "Delete", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.publish", "applyToProperties": Array [ "locales", ], "label": "Publish", "subjects": Array [], }, ], Array [ Object { "label": "user", "properties": Array [ Object { "children": Array [ Object { "label": "username", "required": true, "value": "username", }, Object { "label": "email", "required": true, "value": "email", }, Object { "label": "provider", "value": "provider", }, Object { "label": "password", "value": "password", }, Object { "label": "resetPasswordToken", "value": "resetPasswordToken", }, Object { "label": "confirmationToken", "value": "confirmationToken", }, Object { "label": "confirmed", "value": "confirmed", }, Object { "label": "blocked", "value": "blocked", }, Object { "label": "role", "value": "role", }, ], "label": "Fields", "value": "fields", }, ], "uid": "plugins::users-permissions.user", }, ], ], "plugins": Array [ Object { "action": "plugins::content-manager.collection-types.configure-view", "displayName": "Configure view", "plugin": "content-manager", "subCategory": "collection types", }, Object { "action": "plugins::content-manager.components.configure-layout", "displayName": "Configure Layout", "plugin": "content-manager", "subCategory": "components", }, Object { "action": "plugins::content-manager.single-types.configure-view", "displayName": "Configure view", "plugin": "content-manager", "subCategory": "single types", }, Object { "action": "plugins::content-type-builder.read", "displayName": "Read", "plugin": "content-type-builder", "subCategory": "general", }, Object { "action": "plugins::documentation.read", "displayName": "Access the Documentation", "plugin": "documentation", "subCategory": "general", }, Object { "action": "plugins::documentation.settings.regenerate", "displayName": "Regenerate", "plugin": "documentation", "subCategory": "settings", }, Object { "action": "plugins::documentation.settings.update", "displayName": "Update and delete", "plugin": "documentation", "subCategory": "settings", }, Object { "action": "plugins::upload.assets.copy-link", "displayName": "Copy link", "plugin": "upload", "subCategory": "assets", }, Object { "action": "plugins::upload.assets.create", "displayName": "Create (upload)", "plugin": "upload", "subCategory": "assets", }, Object { "action": "plugins::upload.assets.download", "displayName": "Download", "plugin": "upload", "subCategory": "assets", }, Object { "action": "plugins::upload.assets.update", "displayName": "Update (crop, details, replace) + delete", "plugin": "upload", "subCategory": "assets", }, Object { "action": "plugins::upload.read", "displayName": "Access the Media Library", "plugin": "upload", "subCategory": "general", }, Object { "action": "plugins::users-permissions.advanced-settings.read", "displayName": "Read", "plugin": "users-permissions", "subCategory": "advancedSettings", }, Object { "action": "plugins::users-permissions.advanced-settings.update", "displayName": "Edit", "plugin": "users-permissions", "subCategory": "advancedSettings", }, Object { "action": "plugins::users-permissions.email-templates.read", "displayName": "Read", "plugin": "users-permissions", "subCategory": "emailTemplates", }, Object { "action": "plugins::users-permissions.email-templates.update", "displayName": "Edit", "plugin": "users-permissions", "subCategory": "emailTemplates", }, Object { "action": "plugins::users-permissions.providers.read", "displayName": "Read", "plugin": "users-permissions", "subCategory": "providers", }, Object { "action": "plugins::users-permissions.providers.update", "displayName": "Edit", "plugin": "users-permissions", "subCategory": "providers", }, Object { "action": "plugins::users-permissions.roles.create", "displayName": "Create", "plugin": "users-permissions", "subCategory": "roles", }, Object { "action": "plugins::users-permissions.roles.delete", "displayName": "Delete", "plugin": "users-permissions", "subCategory": "roles", }, Object { "action": "plugins::users-permissions.roles.read", "displayName": "Read", "plugin": "users-permissions", "subCategory": "roles", }, Object { "action": "plugins::users-permissions.roles.update", "displayName": "Update", "plugin": "users-permissions", "subCategory": "roles", }, ], "settings": Array [ Object { "action": "admin::marketplace.plugins.install", "category": "plugins and marketplace", "displayName": "Install (only for dev env)", "subCategory": "plugins", }, Object { "action": "admin::marketplace.plugins.uninstall", "category": "plugins and marketplace", "displayName": "Uninstall (only for dev env)", "subCategory": "plugins", }, Object { "action": "admin::marketplace.read", "category": "plugins and marketplace", "displayName": "Access the marketplace", "subCategory": "marketplace", }, Object { "action": "admin::roles.create", "category": "users and roles", "displayName": "Create", "subCategory": "roles", }, Object { "action": "admin::roles.delete", "category": "users and roles", "displayName": "Delete", "subCategory": "roles", }, Object { "action": "admin::roles.read", "category": "users and roles", "displayName": "Read", "subCategory": "roles", }, Object { "action": "admin::roles.update", "category": "users and roles", "displayName": "Update", "subCategory": "roles", }, Object { "action": "admin::users.create", "category": "users and roles", "displayName": "Create (invite)", "subCategory": "users", }, Object { "action": "admin::users.delete", "category": "users and roles", "displayName": "Delete", "subCategory": "users", }, Object { "action": "admin::users.read", "category": "users and roles", "displayName": "Read", "subCategory": "users", }, Object { "action": "admin::users.update", "category": "users and roles", "displayName": "Update", "subCategory": "users", }, Object { "action": "admin::webhooks.create", "category": "webhooks", "displayName": "Create", "subCategory": "general", }, Object { "action": "admin::webhooks.delete", "category": "webhooks", "displayName": "Delete", "subCategory": "general", }, Object { "action": "admin::webhooks.read", "category": "webhooks", "displayName": "Read", "subCategory": "general", }, Object { "action": "admin::webhooks.update", "category": "webhooks", "displayName": "Update", "subCategory": "general", }, Object { "action": "plugins::email.settings.read", "category": "email", "displayName": "Access the Email Settings page", "subCategory": "general", }, Object { "action": "plugins::i18n.locale.create", "category": "Internationalization", "displayName": "Create", "subCategory": "Locales", }, Object { "action": "plugins::i18n.locale.delete", "category": "Internationalization", "displayName": "Delete", "subCategory": "Locales", }, Object { "action": "plugins::i18n.locale.read", "category": "Internationalization", "displayName": "Read", "subCategory": "Locales", }, Object { "action": "plugins::i18n.locale.update", "category": "Internationalization", "displayName": "Update", "subCategory": "Locales", }, Object { "action": "plugins::upload.settings.read", "category": "media library", "displayName": "Access the Media Library settings page", "subCategory": "general", }, ], "singleTypes": Array [ Array [ Object { "actionId": "plugins::content-manager.explorer.create", "applyToProperties": Array [ "fields", "locales", ], "label": "Create", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.read", "applyToProperties": Array [ "fields", "locales", ], "label": "Read", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.update", "applyToProperties": Array [ "fields", "locales", ], "label": "Update", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.delete", "applyToProperties": Array [ "locales", ], "label": "Delete", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.publish", "applyToProperties": Array [ "locales", ], "label": "Publish", "subjects": Array [], }, ], Array [], ], }, } `); } else { // eslint-disable-next-line node/no-extraneous-require const { features } = require('@strapi/strapi/lib/utils/ee'); const hasSSO = features.isEnabled('sso'); if (hasSSO) { expect(sortedData).toMatchInlineSnapshot(` Object { "conditions": Array [ Object { "category": "default", "displayName": "Is creator", "id": "admin::is-creator", }, Object { "category": "default", "displayName": "Has same role as creator", "id": "admin::has-same-role-as-creator", }, ], "sections": Object { "collectionTypes": Array [ Array [ Object { "actionId": "plugins::content-manager.explorer.create", "applyToProperties": Array [ "fields", "locales", ], "label": "Create", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.read", "applyToProperties": Array [ "fields", "locales", ], "label": "Read", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.update", "applyToProperties": Array [ "fields", "locales", ], "label": "Update", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.delete", "applyToProperties": Array [ "locales", ], "label": "Delete", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.publish", "applyToProperties": Array [ "locales", ], "label": "Publish", "subjects": Array [], }, ], Array [ Object { "label": "user", "properties": Array [ Object { "children": Array [ Object { "label": "username", "required": true, "value": "username", }, Object { "label": "email", "required": true, "value": "email", }, Object { "label": "provider", "value": "provider", }, Object { "label": "password", "value": "password", }, Object { "label": "resetPasswordToken", "value": "resetPasswordToken", }, Object { "label": "confirmationToken", "value": "confirmationToken", }, Object { "label": "confirmed", "value": "confirmed", }, Object { "label": "blocked", "value": "blocked", }, Object { "label": "role", "value": "role", }, ], "label": "Fields", "value": "fields", }, ], "uid": "plugins::users-permissions.user", }, ], ], "plugins": Array [ Object { "action": "plugins::content-manager.collection-types.configure-view", "displayName": "Configure view", "plugin": "content-manager", "subCategory": "collection types", }, Object { "action": "plugins::content-manager.components.configure-layout", "displayName": "Configure Layout", "plugin": "content-manager", "subCategory": "components", }, Object { "action": "plugins::content-manager.single-types.configure-view", "displayName": "Configure view", "plugin": "content-manager", "subCategory": "single types", }, Object { "action": "plugins::content-type-builder.read", "displayName": "Read", "plugin": "content-type-builder", "subCategory": "general", }, Object { "action": "plugins::documentation.read", "displayName": "Access the Documentation", "plugin": "documentation", "subCategory": "general", }, Object { "action": "plugins::documentation.settings.regenerate", "displayName": "Regenerate", "plugin": "documentation", "subCategory": "settings", }, Object { "action": "plugins::documentation.settings.update", "displayName": "Update and delete", "plugin": "documentation", "subCategory": "settings", }, Object { "action": "plugins::upload.assets.copy-link", "displayName": "Copy link", "plugin": "upload", "subCategory": "assets", }, Object { "action": "plugins::upload.assets.create", "displayName": "Create (upload)", "plugin": "upload", "subCategory": "assets", }, Object { "action": "plugins::upload.assets.download", "displayName": "Download", "plugin": "upload", "subCategory": "assets", }, Object { "action": "plugins::upload.assets.update", "displayName": "Update (crop, details, replace) + delete", "plugin": "upload", "subCategory": "assets", }, Object { "action": "plugins::upload.read", "displayName": "Access the Media Library", "plugin": "upload", "subCategory": "general", }, Object { "action": "plugins::users-permissions.advanced-settings.read", "displayName": "Read", "plugin": "users-permissions", "subCategory": "advancedSettings", }, Object { "action": "plugins::users-permissions.advanced-settings.update", "displayName": "Edit", "plugin": "users-permissions", "subCategory": "advancedSettings", }, Object { "action": "plugins::users-permissions.email-templates.read", "displayName": "Read", "plugin": "users-permissions", "subCategory": "emailTemplates", }, Object { "action": "plugins::users-permissions.email-templates.update", "displayName": "Edit", "plugin": "users-permissions", "subCategory": "emailTemplates", }, Object { "action": "plugins::users-permissions.providers.read", "displayName": "Read", "plugin": "users-permissions", "subCategory": "providers", }, Object { "action": "plugins::users-permissions.providers.update", "displayName": "Edit", "plugin": "users-permissions", "subCategory": "providers", }, Object { "action": "plugins::users-permissions.roles.create", "displayName": "Create", "plugin": "users-permissions", "subCategory": "roles", }, Object { "action": "plugins::users-permissions.roles.delete", "displayName": "Delete", "plugin": "users-permissions", "subCategory": "roles", }, Object { "action": "plugins::users-permissions.roles.read", "displayName": "Read", "plugin": "users-permissions", "subCategory": "roles", }, Object { "action": "plugins::users-permissions.roles.update", "displayName": "Update", "plugin": "users-permissions", "subCategory": "roles", }, ], "settings": Array [ Object { "action": "admin::marketplace.plugins.install", "category": "plugins and marketplace", "displayName": "Install (only for dev env)", "subCategory": "plugins", }, Object { "action": "admin::marketplace.plugins.uninstall", "category": "plugins and marketplace", "displayName": "Uninstall (only for dev env)", "subCategory": "plugins", }, Object { "action": "admin::marketplace.read", "category": "plugins and marketplace", "displayName": "Access the marketplace", "subCategory": "marketplace", }, Object { "action": "admin::provider-login.read", "category": "single sign on", "displayName": "Read", "subCategory": "options", }, Object { "action": "admin::provider-login.update", "category": "single sign on", "displayName": "Update", "subCategory": "options", }, Object { "action": "admin::roles.create", "category": "users and roles", "displayName": "Create", "subCategory": "roles", }, Object { "action": "admin::roles.delete", "category": "users and roles", "displayName": "Delete", "subCategory": "roles", }, Object { "action": "admin::roles.read", "category": "users and roles", "displayName": "Read", "subCategory": "roles", }, Object { "action": "admin::roles.update", "category": "users and roles", "displayName": "Update", "subCategory": "roles", }, Object { "action": "admin::users.create", "category": "users and roles", "displayName": "Create (invite)", "subCategory": "users", }, Object { "action": "admin::users.delete", "category": "users and roles", "displayName": "Delete", "subCategory": "users", }, Object { "action": "admin::users.read", "category": "users and roles", "displayName": "Read", "subCategory": "users", }, Object { "action": "admin::users.update", "category": "users and roles", "displayName": "Update", "subCategory": "users", }, Object { "action": "admin::webhooks.create", "category": "webhooks", "displayName": "Create", "subCategory": "general", }, Object { "action": "admin::webhooks.delete", "category": "webhooks", "displayName": "Delete", "subCategory": "general", }, Object { "action": "admin::webhooks.read", "category": "webhooks", "displayName": "Read", "subCategory": "general", }, Object { "action": "admin::webhooks.update", "category": "webhooks", "displayName": "Update", "subCategory": "general", }, Object { "action": "plugins::email.settings.read", "category": "email", "displayName": "Access the Email Settings page", "subCategory": "general", }, Object { "action": "plugins::i18n.locale.create", "category": "Internationalization", "displayName": "Create", "subCategory": "Locales", }, Object { "action": "plugins::i18n.locale.delete", "category": "Internationalization", "displayName": "Delete", "subCategory": "Locales", }, Object { "action": "plugins::i18n.locale.read", "category": "Internationalization", "displayName": "Read", "subCategory": "Locales", }, Object { "action": "plugins::i18n.locale.update", "category": "Internationalization", "displayName": "Update", "subCategory": "Locales", }, Object { "action": "plugins::upload.settings.read", "category": "media library", "displayName": "Access the Media Library settings page", "subCategory": "general", }, ], "singleTypes": Array [ Array [ Object { "actionId": "plugins::content-manager.explorer.create", "applyToProperties": Array [ "fields", "locales", ], "label": "Create", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.read", "applyToProperties": Array [ "fields", "locales", ], "label": "Read", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.update", "applyToProperties": Array [ "fields", "locales", ], "label": "Update", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.delete", "applyToProperties": Array [ "locales", ], "label": "Delete", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "actionId": "plugins::content-manager.explorer.publish", "applyToProperties": Array [ "locales", ], "label": "Publish", "subjects": Array [], }, ], Array [], ], }, } `); } else { expect(sortedData).toMatchInlineSnapshot(` Object { "conditions": Array [ Object { "category": "default", "displayName": "Is creator", "id": "admin::is-creator", }, Object { "category": "default", "displayName": "Has same role as creator", "id": "admin::has-same-role-as-creator", }, ], "sections": Object { "contentTypes": Array [ Object { "action": "plugins::content-manager.explorer.create", "displayName": "Create", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "action": "plugins::content-manager.explorer.delete", "displayName": "Delete", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "action": "plugins::content-manager.explorer.publish", "displayName": "Publish", "subjects": Array [], }, Object { "action": "plugins::content-manager.explorer.read", "displayName": "Read", "subjects": Array [ "plugins::users-permissions.user", ], }, Object { "action": "plugins::content-manager.explorer.update", "displayName": "Update", "subjects": Array [ "plugins::users-permissions.user", ], }, ], "plugins": Array [ Object { "action": "plugins::content-manager.collection-types.configure-view", "displayName": "Configure view", "plugin": "plugin::content-manager", "subCategory": "collection types", }, Object { "action": "plugins::content-manager.components.configure-layout", "displayName": "Configure Layout", "plugin": "plugin::content-manager", "subCategory": "components", }, Object { "action": "plugins::content-manager.single-types.configure-view", "displayName": "Configure view", "plugin": "plugin::content-manager", "subCategory": "single types", }, Object { "action": "plugins::content-type-builder.read", "displayName": "Read", "plugin": "plugin::content-type-builder", "subCategory": "general", }, Object { "action": "plugins::documentation.read", "displayName": "Access the Documentation", "plugin": "plugin::documentation", "subCategory": "general", }, Object { "action": "plugins::documentation.settings.regenerate", "displayName": "Regenerate", "plugin": "plugin::documentation", "subCategory": "settings", }, Object { "action": "plugins::documentation.settings.update", "displayName": "Update and delete", "plugin": "plugin::documentation", "subCategory": "settings", }, Object { "action": "plugins::upload.assets.copy-link", "displayName": "Copy link", "plugin": "plugin::upload", "subCategory": "assets", }, Object { "action": "plugins::upload.assets.create", "displayName": "Create (upload)", "plugin": "plugin::upload", "subCategory": "assets", }, Object { "action": "plugins::upload.assets.download", "displayName": "Download", "plugin": "plugin::upload", "subCategory": "assets", }, Object { "action": "plugins::upload.assets.update", "displayName": "Update (crop, details, replace) + delete", "plugin": "plugin::upload", "subCategory": "assets", }, Object { "action": "plugins::upload.read", "displayName": "Access the Media Library", "plugin": "plugin::upload", "subCategory": "general", }, Object { "action": "plugins::users-permissions.advanced-settings.read", "displayName": "Read", "plugin": "plugin::users-permissions", "subCategory": "advancedSettings", }, Object { "action": "plugins::users-permissions.advanced-settings.update", "displayName": "Edit", "plugin": "plugin::users-permissions", "subCategory": "advancedSettings", }, Object { "action": "plugins::users-permissions.email-templates.read", "displayName": "Read", "plugin": "plugin::users-permissions", "subCategory": "emailTemplates", }, Object { "action": "plugins::users-permissions.email-templates.update", "displayName": "Edit", "plugin": "plugin::users-permissions", "subCategory": "emailTemplates", }, Object { "action": "plugins::users-permissions.providers.read", "displayName": "Read", "plugin": "plugin::users-permissions", "subCategory": "providers", }, Object { "action": "plugins::users-permissions.providers.update", "displayName": "Edit", "plugin": "plugin::users-permissions", "subCategory": "providers", }, Object { "action": "plugins::users-permissions.roles.create", "displayName": "Create", "plugin": "plugin::users-permissions", "subCategory": "roles", }, Object { "action": "plugins::users-permissions.roles.delete", "displayName": "Delete", "plugin": "plugin::users-permissions", "subCategory": "roles", }, Object { "action": "plugins::users-permissions.roles.read", "displayName": "Read", "plugin": "plugin::users-permissions", "subCategory": "roles", }, Object { "action": "plugins::users-permissions.roles.update", "displayName": "Update", "plugin": "plugin::users-permissions", "subCategory": "roles", }, ], "settings": Array [ Object { "action": "admin::marketplace.plugins.install", "category": "plugins and marketplace", "displayName": "Install (only for dev env)", "subCategory": "plugins", }, Object { "action": "admin::marketplace.plugins.uninstall", "category": "plugins and marketplace", "displayName": "Uninstall (only for dev env)", "subCategory": "plugins", }, Object { "action": "admin::marketplace.read", "category": "plugins and marketplace", "displayName": "Access the marketplace", "subCategory": "marketplace", }, Object { "action": "admin::roles.create", "category": "users and roles", "displayName": "Create", "subCategory": "roles", }, Object { "action": "admin::roles.delete", "category": "users and roles", "displayName": "Delete", "subCategory": "roles", }, Object { "action": "admin::roles.read", "category": "users and roles", "displayName": "Read", "subCategory": "roles", }, Object { "action": "admin::roles.update", "category": "users and roles", "displayName": "Update", "subCategory": "roles", }, Object { "action": "admin::users.create", "category": "users and roles", "displayName": "Create (invite)", "subCategory": "users", }, Object { "action": "admin::users.delete", "category": "users and roles", "displayName": "Delete", "subCategory": "users", }, Object { "action": "admin::users.read", "category": "users and roles", "displayName": "Read", "subCategory": "users", }, Object { "action": "admin::users.update", "category": "users and roles", "displayName": "Update", "subCategory": "users", }, Object { "action": "admin::webhooks.create", "category": "webhooks", "displayName": "Create", "subCategory": "general", }, Object { "action": "admin::webhooks.delete", "category": "webhooks", "displayName": "Delete", "subCategory": "general", }, Object { "action": "admin::webhooks.read", "category": "webhooks", "displayName": "Read", "subCategory": "general", }, Object { "action": "admin::webhooks.update", "category": "webhooks", "displayName": "Update", "subCategory": "general", }, Object { "action": "plugins::email.settings.read", "category": "email", "displayName": "Access the Email Settings page", "subCategory": "general", }, Object { "action": "plugins::upload.settings.read", "category": "media library", "displayName": "Access the Media Library settings page", "subCategory": "general", }, ], }, } `); } } }); });