strapi-plugin-config-sync/server/types/admin-role.js

77 lines
2.8 KiB
JavaScript
Raw Normal View History

2021-10-15 14:54:58 +02:00
const { sanitizeConfig } = require('../utils');
const ConfigType = require("../services/type");
const AdminRolePermissionsConfigType = class AdminRolePermissionsConfigType extends ConfigType {
/**
* Import a single role-permissions config file into the db.
*
* @param {string} configName - The name of the config file.
* @param {string} configContent - The JSON content of the config file.
* @returns {void}
*/
importSingle = async (configName, configContent) => {
// Check if the config should be excluded.
const shouldExclude = strapi.config.get('plugin.config-sync.exclude').includes(`${this.configPrefix}.${configName}`);
if (shouldExclude) return;
const queryAPI = strapi.query(this.queryString);
const existingConfig = await queryAPI
.findOne({ where: { [this.uid]: configName } });
if (existingConfig && configContent === null) {
await queryAPI.delete({ where: { [this.uid]: configName } });
return;
}
if (!existingConfig) {
const { permissions } = configContent;
delete configContent.permissions;
const query = { ...configContent };
this.jsonFields.map((field) => query[field] = JSON.stringify(configContent[field]));
const newConfig = await queryAPI.create({ data: query });
await strapi.admin.services.role.assignPermissions(newConfig.id, permissions);
2021-10-15 14:54:58 +02:00
} else {
await strapi.admin.services.role.assignPermissions(existingConfig.id, configContent.permissions);
2021-10-15 14:54:58 +02:00
delete configContent.permissions;
const query = { ...configContent };
this.jsonFields.map((field) => query[field] = JSON.stringify(configContent[field]));
await queryAPI.update({ where: { [this.uid]: configName }, data: query });
}
}
/**
* Get all role-permissions config from the db.
*
* @returns {object} Object with key value pairs of configs.
*/
getAllFromDatabase = async () => {
const AllConfig = await strapi.query(this.queryString).findMany({ limit: 0 });
const configs = {};
await Promise.all(Object.values(AllConfig).map(async (config) => {
// Check if the config should be excluded.
const shouldExclude = strapi.config.get('plugin.config-sync.exclude').includes(`${this.configPrefix}.${config[this.uid]}`);
if (shouldExclude) return;
config = sanitizeConfig(config);
const existingPermissions = await strapi.admin.services.permission.findMany({
where: { role: { code: config.code } },
});
existingPermissions.map((permission) => sanitizeConfig(permission));
const formattedObject = { ...config, permissions: existingPermissions };
this.jsonFields.map((field) => formattedObject[field] = JSON.parse(config[field]));
configs[`${this.configPrefix}.${config[this.uid]}`] = formattedObject;
}));
return configs;
}
};
module.exports = AdminRolePermissionsConfigType;