发布时间:2023-04-12 18:00
🍳作者: 贤蛋大眼萌,一名很普通但不想普通的程序媛 \\color{#FF0000}{贤蛋 大眼萌 ,一名很普通但不想普通的程序媛} 贤蛋大眼萌,一名很普通但不想普通的程序媛🤳
🙊语录: 多一些不为什么的坚持 \\color{#0000FF}{多一些不为什么的坚持} 多一些不为什么的坚持
📝本文章收录于专栏:Node.js+koa–后端管理系统
💭 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂 o f f e r ,程序员的必备刷题平台 − − 牛客网 \\color{#ff7f50}{眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台--牛客网} 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台−−牛客网
建表语句:
CREATE TABLE IF NOT EXISTS `moment`(
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(1000) NOT NULL,
user_id INT NOT NULL,
createAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updateAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY(user_id) REFERENCES user(id)
);
验证用户是否具备权限verifyAuth
(//目录:@/middleware/auth_middleware.js)–> 创建动态
//目录:@/router/moment_router.js
// 创建动态
const Router = require('koa-router')
const {
create,
} = require('../controller/moment_controller')
const {
verifyAuth,
} =require('../middleware/auth_middleware')
const momentRouter = new Router({prefix: '/moment'})
// 创建动态
momentRouter.post('/',verifyAuth,create)
🎧 PS: 很多的内容都需要验证权限: 修改/删除动态,修改/删除评论
接口:业务接口系统/后端管理系统
- 一对多:user—>role
- 多对多:role—>menu(删除动态和修改动态)
//目录:@/middleware/auth_middleware.js
// 验证已登录用户是否具备修改内容权限中间件
const verifyPermission = async(ctx,next)=>{
console.log("验证已登录用户是否具备修改内容权限middleware");
// 1.获取用户参数
const [resourceKey ]= Object.keys(ctx.params)
const tableName = resourceKey.replace('Id','')
const resourceId = ctx.params[resourceKey]
const { id } = ctx.user
// console.log(momentId,id);
// 2.查询是否具备权限
try{
const isPermission = await authServiece.checkResource(tableName,resourceId,id)
if(!isPermission) throw new Error()
}catch(err){
const error = new Error(errorTypes.UNPERMISSION)
return ctx.app.emit('error',error,ctx)
}
await next()
}
//目录:@/service/auth_service.js
// 数据库查询用户是否存在
const connection = require('../app/database')
class AuthService {
async checkResource (tableName,id,userid){
const statement = `SELECT * FROM ${tableName} WHERE id = ? AND user_id = ?;`;
const [result] = await connection.execute(statement,[id,userid])
return result.length === 0? false:true;
}
}
module.exports = new AuthService()
//目录:@/router/moment_router.js
// 创建动态
const Router = require('koa-router')
const {
create,
} = require('../controller/moment_controller')
const {
verifyAuth,
} =require('../middleware/auth_middleware')
const momentRouter = new Router({prefix: '/moment'})
// 创建动态
momentRouter.post('/',verifyAuth,create)
// 获取动态信息
momentRouter.get('/',list) //获取动态列表
momentRouter.get('/:momentId',detail) //获取单个列表
最后更新:
见上面(verifyAuth)和(verifyPermission)
PS:
求知无坦途,学问无捷径。👣 一步一个脚印,你走过的路,每一步都算数。 \\color{#ff7f50}{一步一个脚印,你走过的路,每一步都算数。} 一步一个脚印,你走过的路,每一步都算数。 每一次进步都是对自己努力的肯定。如果读了文章有收获,不如一起来学习,一起进步吧。传送门🚪刷题神器
一个 Java 顶级高手是怎样炼成的?(附思维导图与学习资料)
Redis缓存系列:你知道redis企业实战存在的问题吗?,牛客java面试宝典pdf
Python与PlantSimulation的socket交互
SpringBoot接口 - 如何生成接口文档之非侵入方式(通过注释生成)Smart-Doc?
【注意力机制】CBAM: Convolutional Block Attention Module
图神经网络框架DGL中的 消息函数、聚合函数及更新函数 的理解与说明
Hack The Box Starting Point 渗透测试入门靶场 TIER 2 - Archetype
sqlserver提权失败_SqlServer SA 弱口令提权
在线下单系统php源码,PIMS在线订单管理系统v4.2.9