目录

GO语言开发实践-soma管理后台

基于 Vue3 和 Golang 开发的管理后台。

动机

学习 golang 也有一段时间了,不过最近需求少,基本没动过手了,想着再不动手就生疏了,于是产生了想自己写一个管理后台的念头。

为什么会有这个想法?

  1. 是想着练手,不要让自己生疏了代码。

  2. 是想着如果以后往开发方向走的话,起码自己要知道这种类型的项目怎么写。

  3. 还有就是想着如果先写一个通用的,以后如果有机会用上,那就可以直接套上这个框架,不用从头开始。

有了想法那就必须马上动手,不然一直挂在心头老想着怎么写始终不可能有什么进展。

前端

由于前端我也不是一开始就会的,就是半路入门的,看了几节 vue3 相关的视频自学,然后看看市面上有什么开源的 vue3 开发的管理后台框架,先拿来用。找了几个,然后花了点时间对比,选择了vue-pure-admin 这个管理后台的前端。

选他的原因有这几个:

  1. 作者经常更新,issue 处理也很快。

  2. 使用 Vue3、Vite、Element-Plus、TypeScript、Pinia、Tailwindcss 等主流技术栈开发。我个人认为,如果要想向前看,就要选新技术栈。

  3. 组件和功能丰富,该作者也会经常开发一些开源组件供大家使用。

就这三点,就足以吸引我使用它了,不过前期我刚开始关注他的时候,还没多少 demo 可以参考,现在所以有几个,不过也不怎么行。

后端

后端我使用的 golang ,本来就是怕生手,拿来练手的。

后端结合了常见的几种组件开发:

  1. Gin ,既然是 web 管理后台,那就要选用一个合适的 web 框架,不过大家都说 Gin 不算框架,就是工具集,不过无所谓了,适合就好。

  2. Gorm ,CRUD 方面的库,用的是这个比较受欢迎的库,毕竟谁也不想每次写代码都写一堆重复的原生语句吧。

  3. Casbin ,然后设计到 rbac 或者 acl 方面的权限控制,就需要用到比较热门的这个库,学起来轻松,用起来方便,功能又强大。

  4. Jwt ,鉴权方面少不了 jwt ,这个不必多说。

  5. Mysql8 ,后面我们的后端存储用的就是大家都认识的 mysql ,也没什么好说的。

后台系统功能

  • 用户管理:提供用户的相关配置,目前用的通用的内置用户(由于是个人业余时间开发,时间有限,后期再支持 ldap 登录)。

  • 角色管理:对权限与菜单进行分配,可根据部门设置角色的数据权限。

  • 菜单管理:已实现菜单动态路由,后端可配置化。

  • 接口管理:管理后台系统的接口管理,与权限控制相关。

  • 操作日志:用户操日志记录。

相关截图

/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E7%99%BB%E5%BD%95%E9%A1%B5.png
登录页
/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E5%B7%A6%E4%BE%A7%E5%AF%BC%E8%88%AA%E6%A0%8F.png
左侧导航栏
/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86.png
用户管理
/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E8%8F%9C%E5%8D%95%E7%AE%A1%E7%90%86.png
菜单管理
/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E8%A7%92%E8%89%B2%E7%AE%A1%E7%90%86.png
角色管理
/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E8%A7%92%E8%89%B2%E6%8E%88%E6%9D%83.png
角色授权
/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E6%8E%A5%E5%8F%A3%E7%AE%A1%E7%90%86.png
接口管理
/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E6%93%8D%E4%BD%9C%E6%97%A5%E5%BF%97.png
操作日志
/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E4%B8%AA%E4%BA%BA%E4%B8%AD%E5%BF%83.png
个人中心
/go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5-soma%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/%E4%B8%B4%E6%97%B6%E4%B8%BB%E9%A2%98.png
临时主题

总结

其他逻辑都比较好些,主要是角色管理这一块,一开始我的后端代码是拿别人的套用的,但是它角色管理有点鸡肋,多了个角色等级。

  1. 靠角色等级来限制角色的行为,延申出来的问题就是,我们建立角色的时候需要考虑要给角色授权什么等级,什么接口和菜单权限,太麻烦了,本身角色管理就是可以管理任何角色,所以我干脆给它改造掉。

  2. 我的逻辑是,只要有角色管理员相关的权限,就可以直接控制角色授权,但是这样会不会权限太大,所以我给他套了了个权限范围:

    • 不能修改自己的角色权限和状态,防止提权。

    • 不能给别的角色授予超出自己拥有的权限以外的权限,同样防止利用给其他角色提权再让自己提权。

    • 不能修改自己账户的权限,防止给自己加个 admin 的权限,给自己提权。

    • 不能修改 admin 的权限。

    • admin 可以做所有事情,但是没对它自身做现在,所以操作要小心。

  3. 接下来看看有没有机会再对这个管理平台做一些集成,给他利用起来。