// 角色访问控制
// 给用户赋予角色 角色对应功能
// 一个用户关联多个角色 一个角色关联多个功能
// 设计表结构
// 点击查看ER图表===选择模型===新建模型
// 用户表base_user
// 按钮权限 和菜单权限
// permission
// 关联
// 创建关联表
//模型 文件 导出sql
// 或者直接生成到数据库中
// 新建数据库;
// 模型点文件 同步到数据库
// 多对多的才会用关联表
//permission 用户管理下面 有两个按钮权限
//https://eggjs.org/zh-cn/intro/quickstart.html
cnpm init egg --type=ts
// 类似postman的工具
// https://insomnia.rest/
// passport 用来鉴权的
// egg-passport
npm i --save egg-passport egg-passport-local
// 关闭csrf跨站攻击
// umi
//https://github.com/umijs/create-umi
// umi ui
// 需要后端鉴权
// 关联表
// SELECT role.* FROM role_user INNER JOIN role ON role_user.role_id=role.id WHERE role_user.user_id=1;
// 角色处理有两种选择
// 路径的角色 属于哪个角色在前端配置的
// 当前用户有哪些角色由后端配
//第二种是动态路由 由后端返回的一个动态路由表
//https://pro.ant.design/docs/authority-management-cn
// 这里的获取方式有几种,像 pro 现在这样从 config 中传值,也可以通过 http 请求从服务端获取,甚至本地的 json 文件加载也可以。routerData 是一个 json 数组。获取之后只需返回类似格式的 json 即可。
//用户篡改权限的话 是有问题的 所以需要后端拦截 比较接口api
// 角色用户表关联 角色权限表
SELECT permission.KEY FROM role_user INNER JOIN role_permission ON role_user.role_id=role_permission.role_id
INNER JOIN permission ON role_permission.permission_id=permission.id
WHERE role_user.user_id=1;
///server/api/user/add
// 前端隐藏判断条件被篡改 还可以后端控制接口的返回值 做一层拦截
// 即使按钮被篡改显示出来了 真正发请求的时候 还是被后端拦截了
// 按钮的显示控制权限 用authority包裹一下 就可以 传递admin 为指定的角色
// 点击删除按钮的时候发送删除请求的时候 后端做一层校验 看下是否有删除的权限
// 登录接口给到用户权限
router.post('/api/login/account',localStrategy)
// 对接口的中间件做接口拦截处理
router.post('/api/user/add',auth,controller.user.addUser)
router.get('/api/loginCallback',controller.user.loginCallback)