Commit 22d3da8a by Harish Patel

channel partner and user permissions

1 parent a591cf87
{
"kind": "collectionType",
"collectionName": "channel_partners",
"info": {
"singularName": "channel-partner",
"pluralName": "channel-partners",
"displayName": "Channel Partner",
"description": ""
},
"options": {
"draftAndPublish": false
},
"pluginOptions": {},
"attributes": {
"companyName": {
"type": "string",
"required": true
},
"companyType": {
"type": "string"
},
"contactPersonName": {
"type": "string"
},
"email": {
"type": "string"
},
"communicationAddress": {
"type": "text"
},
"mobileNo": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"reraNumber": {
"type": "string"
},
"regionOfOperation": {
"type": "string"
},
"sourcingManager": {
"type": "string"
},
"pan": {
"type": "string"
},
"panFile": {
"type": "media",
"multiple": true,
"required": false,
"allowedTypes": [
"images",
"files"
]
},
"memberOf": {
"type": "string"
},
"termsAndConditions": {
"type": "boolean"
},
"user": {
"type": "relation",
"relation": "oneToOne",
"target": "plugin::users-permissions.user"
}
}
}
'use strict';
/**
* channel-partner controller
*/
const { createCoreController } = require('@strapi/strapi').factories;
module.exports = createCoreController('api::channel-partner.channel-partner');
'use strict';
/**
* channel-partner router
*/
const { createCoreRouter } = require('@strapi/strapi').factories;
module.exports = createCoreRouter('api::channel-partner.channel-partner');
'use strict';
/**
* channel-partner service
*/
const { createCoreService } = require('@strapi/strapi').factories;
module.exports = createCoreService('api::channel-partner.channel-partner');
const utils = require("@strapi/utils");
const _ = require("lodash");
const { sanitize } = utils;
const { ApplicationError } = utils.errors;
const {
validateRegisterBody,
} = require("@strapi/plugin-users-permissions/server/controllers/validation/auth");
const sanitizeUser = (user, ctx) => {
const { auth } = ctx.state;
const userSchema = strapi.getModel("plugin::users-permissions.user");
return sanitize.contentAPI.output(user, userSchema, { auth });
};
const userPermissionExtension = (plugin) => {
/** Example of overriding and adding a new endpoint, check the section where we have registered this as a route below. */
plugin.controllers.user.updateMe = (ctx) => {
ctx.params.id = ctx.state.user.id;
return plugin.controllers.user.update(ctx);
};
/** Example of overriding an existing route. */
plugin.controllers.auth.register = async (ctx) => {
const pluginStore = await strapi.store({
type: "plugin",
name: "users-permissions",
});
const settings = await pluginStore.get({ key: "advanced" });
if (!settings.allow_register) {
throw new ApplicationError("Register action is currently disabled");
}
const params = {
..._.omit(ctx.request.body, [
"confirmed",
"blocked",
"confirmationToken",
"resetPasswordToken",
"provider",
]),
provider: "local",
};
await validateRegisterBody(params);
// We have added the ability to choose the role.
// This is the customisation that we wanted to do to make this possible
const newUserRole = params?.role ? params?.role : settings.default_role;
// the query was also changed to apply a query on "name" rather than the default "type".
const role = await strapi
.query("plugin::users-permissions.role")
.findOne({ where: { name: newUserRole } });
if (!role) {
throw new ApplicationError("Impossible to find the default role");
}
// @ts-ignore
const { email, username, provider } = params;
const identifierFilter = {
$or: [
{ email: email.toLowerCase() },
{ username: email.toLowerCase() },
{ username },
{ email: username },
],
};
const conflictingUserCount = await strapi
.query("plugin::users-permissions.user")
.count({
where: { ...identifierFilter, provider },
});
if (conflictingUserCount > 0) {
throw new ApplicationError("Email or Username are already taken");
}
if (settings.unique_email) {
const conflictingUserCount = await strapi
.query("plugin::users-permissions.user")
.count({
where: { ...identifierFilter },
});
if (conflictingUserCount > 0) {
throw new ApplicationError("Email or Username are already taken");
}
}
let newUser = {
...params,
role: role.id,
email: email.toLowerCase(),
username,
confirmed: !settings.email_confirmation,
};
const user = await strapi
.plugin("users-permissions")
.service("user")
.add(newUser);
const sanitizedUser = await sanitizeUser(user, ctx);
if (settings.email_confirmation) {
try {
await strapi
.plugin("users-permissions")
.service("user")
.sendConfirmationEmail(sanitizedUser);
} catch (err) {
throw new ApplicationError(err.message);
}
return ctx.send({ user: sanitizedUser });
}
const jwt = strapi
.plugin("users-permissions")
.service("jwt")
.issue(_.pick(user, ["id"]));
return ctx.send({
jwt,
user: sanitizedUser,
});
};
plugin.routes["content-api"].routes.push({
method: "PUT",
path: "/users/me",
handler: "user.updateMe",
});
return plugin;
};
module.exports = userPermissionExtension;
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!