UNPKG

@rnaga/wp-node

Version:

👉 **[View Full Documentation at rnaga.github.io/wp-node →](https://rnaga.github.io/wp-node/)**

199 lines (198 loc) • 7.67 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RolesCrud = void 0; const config_1 = require("../config"); const components_1 = require("../core/components"); const roles_util_1 = require("../core/utils/roles.util"); const vars_1 = require("../core/vars"); const component_1 = require("../decorators/component"); const defaults = __importStar(require("../defaults")); const transactions_1 = require("../transactions"); const val = __importStar(require("../validators")); const crud_1 = require("./crud"); const error_1 = require("./error"); let RolesCrud = class RolesCrud extends crud_1.Crud { config; constructor(components, config) { super(components); this.config = config; } async checkPermission(roleNames) { const defaultRoles = defaults.roles; const { user: currentUser } = await this.getUser(); if (!(await currentUser.can("manage_roles"))) { throw new error_1.CrudError(error_1.StatusMessage.UNAUTHORIZED, "Not permitted"); } for (const roleName of roleNames) { // Default roles are not allowed to edit if (Object.keys(defaultRoles).includes(roleName)) { throw new error_1.CrudError(error_1.StatusMessage.UNAUTHORIZED, "Not permitted to edit default roles"); } } } async create(data, options) { try { const { blogId, siteId } = options ?? {}; await this.switchBlog({ siteId, blogId, }); await this.checkPermission([data.role]); const vars = this.components.get(vars_1.Vars); const currentUserRoles = vars.USER_ROLES; if (currentUserRoles[data.role]) { throw new error_1.CrudError(error_1.StatusMessage.BAD_REQUEST, "Role already exists"); } data.new_role = undefined; const roleTrx = this.components.get(transactions_1.RolesTrx); const result = await roleTrx.upsert(data); return this.returnValue(result); } finally { await this.restoreBlog(); } } async delete(roleName, options) { try { const { blogId, siteId } = options ?? {}; await this.switchBlog({ siteId, blogId, }); await this.checkPermission([roleName]); const roleTrx = this.components.get(transactions_1.RolesTrx); const result = await roleTrx.remove(roleName); return this.returnValue(result); } finally { await this.restoreBlog(); } } async update(roleName, data, options) { try { const { blogId, siteId } = options ?? {}; await this.switchBlog({ siteId, blogId, }); const updateData = { ...data, role: roleName, }; const roleNames = data.new_role ? [roleName, data.new_role] : [roleName]; await this.checkPermission(roleNames); data.new_role = undefined; const roleTrx = this.components.get(transactions_1.RolesTrx); const result = await roleTrx.upsert(updateData); return this.returnValue(result); } finally { await this.restoreBlog(); } } async list(args) { let blogIds; if (!this.config.isMultiSite()) { blogIds = [1]; } else { const parsedArgs = val.crud.rolesListParams.parse(args); blogIds = parsedArgs.blog_ids; } const [blogs, errors] = await this.getAvailableBlogs({ blogIds, canArgs: [["list_users"]], }); if (errors.length > 0) { throw errors[0]; } const roles = []; const roleUtil = this.components.get(roles_util_1.RolesUtil); for (const blog of blogs) { const blogId = blog.blog_id; roles.push({ blog, roles: await roleUtil.get(blogId), }); } return this.returnValue(roles); } async count(args) { let siteId; let blogId; if (!this.config.isMultiSite()) { blogId = 1; siteId = undefined; } else { const parsedArgs = val.crud.rolesCountListParams.parse(args); blogId = parsedArgs.blog_id; siteId = parsedArgs.site_id; } if (!blogId && !siteId) { throw new error_1.CrudError(error_1.StatusMessage.BAD_REQUEST, "Missing parameter"); } await this.checkBlogsPermission({ blogIds: blogId ? [blogId] : undefined, siteIds: siteId ? [siteId] : undefined, canArgs: [["list_users"]], }); const rolesUtil = this.components.get(roles_util_1.RolesUtil); let counts = {}; if (siteId) { const superAdmins = await rolesUtil.getSuperAdmins({ siteId }); counts = { superadmins: superAdmins.length }; } else if (blogId) { counts = await rolesUtil.count(blogId); } return this.returnValue(counts); } }; exports.RolesCrud = RolesCrud; exports.RolesCrud = RolesCrud = __decorate([ (0, component_1.component)(), __metadata("design:paramtypes", [components_1.Components, config_1.Config]) ], RolesCrud);