当前位置: 首页 > news >正文

wordpress 网站标题图网站注册域名多少钱

wordpress 网站标题图,网站注册域名多少钱,免费兼职一单一结,网站设计的含义先上图: 整个角色管理是如何做的吗? 首先你要处理后端,要先把角色存到用户那。 这是用户管理部分的内容: 可以看到一个用户是有多个角色的。 看到没有,存的是数组 数组的是一个 role 对象 role 对象是这样&#xf…

先上图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
整个角色管理是如何做的吗?

首先你要处理后端,要先把角色存到用户那。

在这里插入图片描述
这是用户管理部分的内容:

可以看到一个用户是有多个角色的。

在这里插入图片描述
看到没有,存的是数组

数组的是一个 role 对象

role 对象是这样:

在这里插入图片描述
主要是存一个 name 就好。permissions 是权限列表。

import { Request, Response } from 'express';
import Role from '../models/role';
import handleAsync from '../utils/handleAsync';// Build query based on query parameters
const buildQuery = (queryParams: any): any => {const query: any = {};if (queryParams.name) {query.name = { $regex: queryParams.name, $options: 'i' };}return query;
};// 获取所有角色
const getRoles = handleAsync(async (req: Request, res: Response) => {const { current = '1', pageSize = '10' } = req.query;const query = buildQuery(req.query);const roles = await Role.find(query).populate('permissions').sort('-createdAt') // Sort by creation time in descending order.skip((+current - 1) * +pageSize).limit(+pageSize).exec();res.json({success: true,data: roles,});
});// 根据 ID 获取角色
const getRoleById = handleAsync(async (req: Request, res: Response) => {const role = await Role.findById(req.params.id).exec();if (!role) {res.status(404);throw new Error('Role not found');}res.json({success: true,data: role,});
});// 添加新角色
const addRole = handleAsync(async (req: Request, res: Response) => {const newRole = new Role({...req.body,});const savedRole = await newRole.save();res.json({success: true,data: savedRole,});
});// 更新角色
const updateRole = handleAsync(async (req: Request, res: Response) => {const { id } = req.params;const updatedRole = await Role.findByIdAndUpdate(id,{ ...req.body },{ new: true },).exec();if (!updatedRole) {res.status(404);throw new Error('Role not found');}res.json({success: true,data: updatedRole,});
});// 删除角色
const deleteRole = handleAsync(async (req: Request, res: Response) => {const { id } = req.params;const role = await Role.findByIdAndDelete(id).exec();if (!role) {res.status(404);throw new Error('Role not found');}res.json({success: true,data: { message: 'Role deleted successfully' },});
});// 批量删除角色
const deleteMultipleRoles = handleAsync(async (req: Request, res: Response) => {const { ids } = req.body;await Role.deleteMany({_id: { $in: ids },}).exec();res.json({success: true,message: `${ids.length} roles deleted successfully`,});
});export {getRoles,getRoleById,addRole,updateRole,deleteRole,deleteMultipleRoles,
};

这是后端代码,就是增删改查。比较容易理解。

前端:

import { useIntl } from '@umijs/max';
import React, { Key, useState } from 'react';
import { ProForm, ProFormText } from '@ant-design/pro-components';
import { Form, Input, Spin, Tree } from 'antd';
import useQueryList from '@/hooks/useQueryList';
import { FormInstance } from 'antd/es/form';
import { Permission } from '@/apiDataStructures/ApiDataStructure';interface Props {form?: FormInstance<any>;newRecord?: boolean;onFinish: (formData: any) => Promise<void>;values?: any;
}const BasicForm: React.FC<Props> = ({ newRecord, onFinish, values }) => {const intl = useIntl();const { items: permissionGroups, loading } = useQueryList('/permission-groups/list');const [expandedKeys, setExpandedKeys] = useState<Key[]>([]);const [autoExpandParent, setAutoExpandParent] = useState<boolean>(true);const [checkedKeys, setCheckedKeys] = useState<Key[] | { checked: Key[]; halfChecked: Key[] }>(values.permissions?.map((permission: Permission) => `${permission._id}`) ?? [],);const [selectedKeys, setSelectedKeys] = useState<Key[]>([]);const onExpand = (expandedKeysValue: Key[]) => {setExpandedKeys(expandedKeysValue);setAutoExpandParent(false);};const onCheck = (checkedKeysValue: Key[] | { checked: Key[]; halfChecked: Key[] }) => {setCheckedKeys(checkedKeysValue);console.log('checkedKeysValue', checkedKeysValue);};const onSelect = (selectedKeysValue: Key[]) => {setSelectedKeys(selectedKeysValue);};return (<ProForminitialValues={{...values,permissions: values?.permissions?.map((permission: Permission) => permission._id),}}onFinish={async (values) => {await onFinish({...values,permissions: checkedKeys,});}}><ProForm.Group><ProFormTextrules={[{ required: true, message: intl.formatMessage({ id: 'enter_name' }) }]}width="md"label={intl.formatMessage({ id: 'name' })}name="name"/><ProForm.Item name="permissions" label={intl.formatMessage({ id: 'permission_choose' })}><Spin spinning={loading}><TreecheckableonExpand={onExpand}expandedKeys={expandedKeys}autoExpandParent={autoExpandParent}onCheck={onCheck}checkedKeys={checkedKeys}onSelect={onSelect}selectedKeys={selectedKeys}treeData={permissionGroups} // Use filtered top-level groupsfieldNames={{ title: 'name', key: '_id', children: 'children' }}/></Spin></ProForm.Item></ProForm.Group>{!newRecord && (<Form.Item name="_id" label={false}><Input type="hidden" /></Form.Item>)}</ProForm>);
};export default BasicForm;

https://www.qiuzhi99.com/playlists/antdpromakemoney.html

http://www.yayakq.cn/news/214479/

相关文章:

  • 织梦网站怎么做安全措施广州网站设计 信科网络
  • 东莞企业网站建设预算大概多少怎么做网站聊天视频直播
  • 佛山网站建设格式有哪些做程序题的国外网站
  • 建设网站项目简历网站做第三方登录
  • 网站开发实训结果分析及其心得体会高级ppt模板免费下载
  • 手机网站建设课程教学网站地图模板.zip
  • 网站建设推广语言在易语言里面做网站
  • 网站项目报价单呼伦贝尔网站开发
  • 招聘网站怎么做预算求个网站你明白的 知乎
  • 章丘网站优化防疫大数据平台
  • 郑州模板网站建设唐山哪里有建设网站的
  • 什么样建网站网站建设 国家标准
  • 怎样建设一个英语网站电子购物网站开发公司
  • 做的网站空白了哪个网站收录排名好
  • 青岛市网站制作白云网站建设公司
  • 培训网站源码wordpress旅游网站管理系统
  • 有没有女的做任务的网站适合前端新手做的网页
  • 怎样制作免费的网站哪些网站在哪找的
  • 旅游网站建设的目标是什么意思好123上网主页
  • 山西科技网站建设怎样在小程序开店
  • 自助建站系统免授权版如何注册一家投资公司
  • 阿里巴巴国际站官网首页四川省建设监理协会网站
  • 昆山网站建设网站手机app一般用什么开发
  • 网站备案和实名认证噼哩噼哩pilipili污染版
  • 如何建设高等数学课程网站泰安网站建设焦点网络
  • 网站 短链接怎么做wordpress如何加表情
  • 中国建设工程造价管理协会网站查询职业生涯规划书模板
  • 怎样建立一个自己的网站wordpress qtranslate
  • 网站加油站网站建设教程小说
  • seo网站建设规划网页设计结构