# role 表及其权限表 rule 表说明
# 一、role 表字段设计
| 字段名 | 数据类型及描述 | 空 | 默认值 | 字段含义 |
|---|---|---|---|---|
| id | int(20) 主键、自增长、UNSIGNED无符号 | 否 | 主键id | |
| name | varchar(30) | 否 | 角色名称 | |
| desc | varchar(255) | 是 | 角色描述,对角色的简单介绍 | |
| create_time | datetime | 否 | CURRENT_TIMESTAMP | 数据创建时间 |
| update_time | datetime | 否 | CURRENT_TIMESTAMP | 数据更新时间 |
| status | int(1) | 否 | 1 | 管理员可用状态:0禁用1启用 |
额外说明:
mysql每行最大只能存65535个字节。假设是utf-8编码,每个字符占3个字节。varchar存储最大字符数为(65535-2-1)/3=21844字符长度
# 二、创建角色表 role
# 1、技术栈php(thinkphp)同学
直接在
phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。
# 角色表 role相关【文档】和【接口】
# 2、技术栈node(egg.js)同学
- 直接在
phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。- 通过迁移命名创建role表:
注意:需要先将管理员表
shop_manager先删除,先创建role表,再创建管理员表shop_manager。
- 具体步骤如下:
- 删除管理员表
shop_manager,只需要执行一次回滚命令:// 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更 npx sequelize db:migrate:undo
记得把迁移文件也删除掉。
2. 创建迁移文件 命令:npx sequelize migration:generate --name=role
- 创建迁移文件
role.js,内容如下:'use strict'; /** @type {import('sequelize-cli').Migration} */ module.exports = { async up (queryInterface, Sequelize) { const { INTEGER, STRING, DATE, ENUM, TEXT, BIGINT} = Sequelize; // 创建表 --- 类似我们sql语句定义表结构 await queryInterface.createTable('role', { id: { type: INTEGER(20).UNSIGNED, primaryKey: true, autoIncrement: true, comment: '角色表主键id' }, name: { type: STRING(30), allowNull: false, defaultValue: '', comment: '角色名称' }, desc: { type: STRING(255), allowNull: true, defaultValue: '' , comment: '角色描述,对角色的简单介绍' }, status:{ type: INTEGER(1), allowNull: false, defaultValue:1, comment: '状态:1:启用,0:禁用' }, // sex: { type: ENUM, values: ['男','女','保密'], allowNull: true, defaultValue: '保密', comment: '留言用户性别'}, create_time: {type: DATE, allowNull: false, defaultValue:Sequelize.fn('NOW')}, update_time: {type: DATE, allowNull: false, defaultValue:Sequelize.fn('NOW')} }); }, async down (queryInterface, Sequelize) { await queryInterface.dropTable('role') } };执行迁移文件命令生成数据库表:
// 创建数据库 npx sequelize db:migrate // 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更 npx sequelize db:migrate:undo // 可以通过 `db:migrate:undo:all` 回退到初始状态 npx sequelize db:migrate:undo:all
# 角色表 role相关【文档】和【接口】
# 三、role表的权限表rule 字段设计
| 字段名 | 数据类型及描述 | 空 | 默认值 | 字段含义 |
|---|---|---|---|---|
| id | int(20) 主键、自增长、UNSIGNED无符号 | 否 | 主键id | |
| pid | int(20) | 否 | 0 | 上一级(父级)id |
| status | int(1) | 是 | 1 | 分类状态 0不可用 1可用 |
| name | varchar(100) | 否 | 后台栏目或者功能名称 | |
| frontname | varchar(100) | 是 | 前端路由name值 | |
| frontpath | varchar(100) | 是 | 前端路由路径 | |
| condition | varchar(255) | 是 | 路由方法 | |
| menu | int(1) | 否 | 1 | 是否显示为菜单:0不显示 1显示 |
| order | int(11) | 是 | 50 | 排序,默认50 |
| icon | varchar(100) | 是 | 图标 | |
| method | varchar(30) | 否 | POST | 请求类型:GET POST PUT DELETE |
| create_time | datetime | 否 | CURRENT_TIMESTAMP | 数据创建时间 |
| update_time | datetime | 否 | CURRENT_TIMESTAMP | 数据更新时间 |
额外说明:
mysql每行最大只能存65535个字节。假设是utf-8编码,每个字符占3个字节。varchar存储最大字符数为(65535-2-1)/3=21844字符长度
# 四、创建角色表role的权限表 rule
# 1、技术栈php(thinkphp)同学
直接在
phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。
# 权限表 rule相关【文档】和【接口】
# 2、技术栈node(egg.js)同学
# 权限表 rule相关【文档】和【接口】
- 直接在
phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。- 通过迁移命名创建角色表role的权限表
rule,具体步骤如下:
- 创建迁移文件命令:
npx sequelize migration:generate --name=rule
- 创建迁移文件
rule.js,内容如下:'use strict'; /** @type {import('sequelize-cli').Migration} */ module.exports = { async up(queryInterface, Sequelize) { const { INTEGER, STRING, DATE, ENUM, TEXT, BIGINT } = Sequelize; // 创建表 --- 类似我们sql语句定义表结构 await queryInterface.createTable('rule', { id: { type: INTEGER(20).UNSIGNED, primaryKey: true, autoIncrement: true, comment: '分类主键id' }, pid: { type: INTEGER(20).UNSIGNED, allowNull: false, defaultValue: 0, comment: '上一级(父级)id', }, status: { type: INTEGER(1), allowNull: false, defaultValue: 1, comment: '分类状态 0不可用 1可用' }, name: { type: STRING(100), allowNull: false, defaultValue: '', comment: '后台栏目或者功能名称' }, frontname: { type: STRING(100), allowNull: true, defaultValue: '', comment: '前端路由name值' }, frontpath: { type: STRING(100),//不限定长度.默认varchar(255) allowNull: true, defaultValue: '', comment: '前端路由路径' }, condition: { type: STRING,//不限定长度.默认varchar(255) allowNull: true, defaultValue: '', comment: '路由方法' }, menu: { type: INTEGER(1), allowNull: false, defaultValue: 1, comment: '是否显示为菜单:0不显示 1显示' }, order: { type: INTEGER,//不限定长度.默认int(11) allowNull: true, defaultValue: 50, comment: '分类排序,默认50' }, icon: { type: STRING(100), allowNull: true, defaultValue: '', comment: '图标' }, method: { type: STRING(30),//不限定长度.默认varchar(255) allowNull: false, defaultValue: 'POST', comment: '请求类型:GET POST PUT DELETE' }, create_time: { type: DATE, allowNull: false, defaultValue: Sequelize.fn('NOW') }, update_time: { type: DATE, allowNull: false, defaultValue: Sequelize.fn('NOW') } }); }, async down(queryInterface, Sequelize) { await queryInterface.dropTable('rule') } };
- 执行迁移文件命令生成数据库表:
// 创建数据库 npx sequelize db:migrate // 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更 npx sequelize db:migrate:undo // 可以通过 `db:migrate:undo:all` 回退到初始状态 npx sequelize db:migrate:undo:all
# 五、角色表role和权限表rule的中间表 role_rule 表字段设计
说明:
我们前面讲
shop_manager表的时候,是通过在表中设置外键字段role_id来关联role表,那么这里我们换另外一种方式来做表的关联,就是这种中间表,比如role_rule, 来关联角色表role和权限表rule, 让大家能够学习到更多关联关系的处理。
role_rule 表字段设计
| 字段名 | 数据类型及描述 | 空 | 默认值 | 字段含义 |
|---|---|---|---|---|
| id | int(20) 主键、自增长、UNSIGNED无符号 | 否 | 主键id | |
| role_id | int(20) | 否 | 0 | 角色表id |
| rule_id | int(20) | 否 | 0 | 权限表id |
| create_time | datetime | 否 | CURRENT_TIMESTAMP | 数据创建时间 |
| update_time | datetime | 否 | CURRENT_TIMESTAMP | 数据更新时间 |
# 六、创建中间表 role_rule
# 1、技术栈php(thinkphp)同学
直接在
phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。
# 角色权限中间表 role_rule相关【文档】和【接口】
# 2、技术栈node(egg.js)同学
# 角色权限中间表 role_rule相关【文档】和【接口】
- 直接在
phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。- 通过迁移命名创建角色表role和权限表rule的中间表
role_rule,具体步骤如下:
- 创建迁移文件命令:
npx sequelize migration:generate --name=role_rule
- 创建迁移文件
role_rule.js,内容如下:'use strict'; /** @type {import('sequelize-cli').Migration} */ module.exports = { async up(queryInterface, Sequelize) { const { INTEGER, STRING, DATE, ENUM, TEXT, BIGINT } = Sequelize; // 创建表 --- 类似我们sql语句定义表结构 await queryInterface.createTable('role_rule', { id: { type: INTEGER(20).UNSIGNED, primaryKey: true, autoIncrement: true, comment: '分类主键id' }, role_id: { type: INTEGER(20).UNSIGNED, allowNull: false, defaultValue: 0, comment: '角色表id', references: { //关联关系 model: 'role', //关联的表 key: 'id' //关联表的主键 }, onDelete: 'cascade', //删除时操作 onUpdate: 'restrict', // 更新时操作 }, rule_id: { type: INTEGER(20).UNSIGNED, allowNull: false, defaultValue: 0, comment: '权限表id', references: { //关联关系 model: 'rule', //关联的表 key: 'id' //关联表的主键 }, onDelete: 'cascade', //删除时操作 onUpdate: 'restrict', // 更新时操作 }, create_time: { type: DATE, allowNull: false, defaultValue: Sequelize.fn('NOW') }, update_time: { type: DATE, allowNull: false, defaultValue: Sequelize.fn('NOW') } }); }, async down(queryInterface, Sequelize) { await queryInterface.dropTable('role_rule') } };
- 执行迁移文件命令生成数据库表:
// 创建数据库 npx sequelize db:migrate // 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更 npx sequelize db:migrate:undo // 可以通过 `db:migrate:undo:all` 回退到初始状态 npx sequelize db:migrate:undo:all