Skip to content

一步步实现微服务权限管理系统(11)

前言

  • 前端参考了很多框架,可谓百花齐放,但很多封装过剩,不利于学习和应用,最终我选择了 [vue-pure-admin](https://github.com/pure-admin/vue-pure-admin)
  • 后端我将使用 go-zero 来带领大家一步步实现一个权限管理系统
  • 本系列项目存放在 purezeroadmin 中,每一部分我都将打tag,并保证每个tag能正常运行。请多点赞和评论。
  • 后面示例均为 purezeroadmin 项目为例,你们可以根据需要自建工程来进行试验。均采用vscode进行试验。
  • go-zero 常用命令我将放入其对应的 makefile 文件中。

本节概述

  • 前端精简版中加入角色管理
  • 后端增加相应数据和接口

前端修改

  • 在外部通过命令pure 创建 vue-pure-admin 项目
  • vue-pure-admin 项目 中 src/views/system 拷贝到当前项目对应位置
  • 只保留role 相关数据
  • 删除多余的依赖项
  • 因为没采用国际化,所以删除 transformI18n 相关依赖
  • 感觉迁移困难可以参考本机tag的前端部分

后端修改

角色相关信息修改

官方前端示例中 code 作为其标识,所以先修改为跟官方一致,再修改和增加其他字段

  • tb_role 字段修改
ALTER TABLE `purezeroadmin`.`tb_role` CHANGE `name` `code` VARCHAR(32) NOT NULL; 
  • 重新生成model
goctl model mysql datasource --url "root:123456@tcp(127.0.0.1:55506)/purezeroadmin"  -t="tb_*" --dir user-api/models --home template

生成成功后运行后端程序成功,当前中间tag版本 1.10.0

  • 修改 tb_role 表信息以符合角色管理
ALTER TABLE `purezeroadmin`.`tb_role`
  ADD COLUMN `id` BIGINT NOT NULL AUTO_INCREMENT FIRST,
  ADD COLUMN `name` VARCHAR (32) NOT NULL AFTER `code`,
  ADD COLUMN `status` TINYINT (1) NOT NULL AFTER `name`,
  ADD COLUMN `remark` VARCHAR (256) NOT NULL AFTER `status`,
  DROP PRIMARY KEY,
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE INDEX (`code`);
UPDATE `purezeroadmin`.`tb_role` SET `name` = '超级管理员' , `status` = '1' WHERE `id` = '1';
update `purezeroadmin`.`tb_roLE` SEt `name` = '普通角色' , `Status` = '1' where `id` = '2'; 
update `pUREZEroadmin`.`tb_role` set `remark` = '超级管理员拥有最高权限' where `ID` = '1'; 
update `purezeroadmin`.`tb_role` set `REMArk` = '普通角色拥有部分权限' wherE `ID` = '2';
UPDATE `purezeroadmin`.`tb_role` SET `create_ts` = '1605456000000' , `update_ts` = '1684512000000' WHERE `id` = '1'; 
update `purezeroadmin`.`tb_rOLE` Set `create_ts` = '1605456000000' , `update_ts` = '1684512000000' where `id` = '2'; 
  • 重新生成model,并修改 user-api/helper/helper.go
func GetAuths(ctx context.Context, svcCtx *svc.ServiceContext, tbUser *models.TbUser) (roles, permissions []string, err error) {
    roles, err = jsonutil.ToArray[string](tbUser.Roles)
    if err != nil {
        return nil, nil, err
    }

    for _, role := range roles {
        tbRole, err := svcCtx.TbRoleModel.FindOneByCode(ctx, role)
        if err != nil {
            return nil, nil, err
        }

        rolePermissions, err := jsonutil.ToArray[string](tbRole.Permissions)
        if err != nil {
            return nil, nil, err
        }

        permissions = arrutil.UniqueConcat(permissions, rolePermissions)
    }

    return roles, permissions, nil
}
  • 增加获取所有角色

  • tb_router 表修改, 用于存储菜单类型

ALTER TABLE `purezeroadmin`.`tb_router` ADD COLUMN `menu_type` BIGINT NOT NULL AFTER `parent_id`;

tag版本

purezeroadmin 项目下

git checkout v1.10.0

接下来

前端引入角色管理,可编辑管理权限

Comments