mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-31 09:56:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| /**
 | |
|  * User.js controller
 | |
|  *
 | |
|  * @description: A set of functions called "actions" for managing `User`.
 | |
|  */
 | |
| 
 | |
| const _ = require('lodash');
 | |
| const adminUserController = require('./user/admin');
 | |
| const apiUserController = require('./user/api');
 | |
| const { sanitizeEntity } = require('strapi-utils');
 | |
| 
 | |
| const sanitizeUser = user =>
 | |
|   sanitizeEntity(user, {
 | |
|     model: strapi.query('user', 'users-permissions').model,
 | |
|   });
 | |
| 
 | |
| const resolveController = ctx => {
 | |
|   const {
 | |
|     state: { isAuthenticatedAdmin },
 | |
|   } = ctx;
 | |
| 
 | |
|   return isAuthenticatedAdmin ? adminUserController : apiUserController;
 | |
| };
 | |
| 
 | |
| const resolveControllerMethod = method => ctx => {
 | |
|   const controller = resolveController(ctx);
 | |
|   const callbackFn = controller[method];
 | |
| 
 | |
|   if (!_.isFunction(callbackFn)) {
 | |
|     return ctx.notFound();
 | |
|   }
 | |
| 
 | |
|   return callbackFn(ctx);
 | |
| };
 | |
| 
 | |
| module.exports = {
 | |
|   create: resolveControllerMethod('create'),
 | |
|   update: resolveControllerMethod('update'),
 | |
| 
 | |
|   /**
 | |
|    * Retrieve user records.
 | |
|    * @return {Object|Array}
 | |
|    */
 | |
|   async find(ctx, next, { populate } = {}) {
 | |
|     let users;
 | |
| 
 | |
|     if (_.has(ctx.query, '_q')) {
 | |
|       // use core strapi query to search for users
 | |
|       users = await strapi.query('user', 'users-permissions').search(ctx.query, populate);
 | |
|     } else {
 | |
|       users = await strapi.plugins['users-permissions'].services.user.fetchAll(ctx.query, populate);
 | |
|     }
 | |
| 
 | |
|     ctx.body = users.map(sanitizeUser);
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * Retrieve a user record.
 | |
|    * @return {Object}
 | |
|    */
 | |
|   async findOne(ctx) {
 | |
|     const { id } = ctx.params;
 | |
|     let data = await strapi.plugins['users-permissions'].services.user.fetch({
 | |
|       id,
 | |
|     });
 | |
| 
 | |
|     if (data) {
 | |
|       data = sanitizeUser(data);
 | |
|     }
 | |
| 
 | |
|     // Send 200 `ok`
 | |
|     ctx.body = data;
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * Retrieve user count.
 | |
|    * @return {Number}
 | |
|    */
 | |
|   async count(ctx) {
 | |
|     if (ctx.query._q) {
 | |
|       return await strapi.plugins['users-permissions'].services.user.countSearch(ctx.query);
 | |
|     }
 | |
|     ctx.body = await strapi.plugins['users-permissions'].services.user.count(ctx.query);
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * Destroy a/an user record.
 | |
|    * @return {Object}
 | |
|    */
 | |
|   async destroy(ctx) {
 | |
|     const { id } = ctx.params;
 | |
|     const data = await strapi.plugins['users-permissions'].services.user.remove({ id });
 | |
|     ctx.send(sanitizeUser(data));
 | |
|   },
 | |
| 
 | |
|   async destroyAll(ctx) {
 | |
|     const {
 | |
|       request: { query },
 | |
|     } = ctx;
 | |
| 
 | |
|     const toRemove = Object.values(_.omit(query, 'source'));
 | |
|     const { primaryKey } = strapi.query('user', 'users-permissions');
 | |
|     const finalQuery = { [`${primaryKey}_in`]: toRemove, _limit: 100 };
 | |
| 
 | |
|     const data = await strapi.plugins['users-permissions'].services.user.removeAll(finalQuery);
 | |
| 
 | |
|     ctx.send(data);
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * Retrieve authenticated user.
 | |
|    * @return {Object|Array}
 | |
|    */
 | |
|   async me(ctx) {
 | |
|     const user = ctx.state.user;
 | |
| 
 | |
|     if (!user) {
 | |
|       return ctx.badRequest(null, [{ messages: [{ id: 'No authorization header was found' }] }]);
 | |
|     }
 | |
| 
 | |
|     ctx.body = sanitizeUser(user);
 | |
|   },
 | |
| };
 | 
