GO语言开发实践-soma管理后台
基于 Vue3 和 Golang 开发的管理后台。
动机
学习 golang 也有一段时间了,不过最近需求少,基本没动过手了,想着再不动手就生疏了,于是产生了想自己写一个管理后台的念头。
为什么会有这个想法?
-
是想着练手,不要让自己生疏了代码。
-
是想着如果以后往开发方向走的话,起码自己要知道这种类型的项目怎么写。
-
还有就是想着如果先写一个通用的,以后如果有机会用上,那就可以直接套上这个框架,不用从头开始。
有了想法那就必须马上动手,不然一直挂在心头老想着怎么写始终不可能有什么进展。
前端
由于前端我也不是一开始就会的,就是半路入门的,看了几节 vue3 相关的视频自学,然后看看市面上有什么开源的 vue3 开发的管理后台框架,先拿来用。找了几个,然后花了点时间对比,选择了vue-pure-admin 这个管理后台的前端。
选他的原因有这几个:
-
作者经常更新,issue 处理也很快。
-
使用 Vue3、Vite、Element-Plus、TypeScript、Pinia、Tailwindcss 等主流技术栈开发。我个人认为,如果要想向前看,就要选新技术栈。
-
组件和功能丰富,该作者也会经常开发一些开源组件供大家使用。
就这三点,就足以吸引我使用它了,不过前期我刚开始关注他的时候,还没多少 demo 可以参考,现在所以有几个,不过也不怎么行。
后端
后端我使用的 golang ,本来就是怕生手,拿来练手的。
后端结合了常见的几种组件开发:
-
Gin ,既然是 web 管理后台,那就要选用一个合适的 web 框架,不过大家都说 Gin 不算框架,就是工具集,不过无所谓了,适合就好。
-
Gorm ,CRUD 方面的库,用的是这个比较受欢迎的库,毕竟谁也不想每次写代码都写一堆重复的原生语句吧。
-
Casbin ,然后设计到 rbac 或者 acl 方面的权限控制,就需要用到比较热门的这个库,学起来轻松,用起来方便,功能又强大。
-
Jwt ,鉴权方面少不了 jwt ,这个不必多说。
-
Mysql8 ,后面我们的后端存储用的就是大家都认识的 mysql ,也没什么好说的。
后台系统功能
-
用户管理:提供用户的相关配置,目前用的通用的内置用户(由于是个人业余时间开发,时间有限,后期再支持 ldap 登录)。
-
角色管理:对权限与菜单进行分配,可根据部门设置角色的数据权限。
-
菜单管理:已实现菜单动态路由,后端可配置化。
-
接口管理:管理后台系统的接口管理,与权限控制相关。
-
操作日志:用户操日志记录。
相关截图










总结
其他逻辑都比较好些,主要是角色管理这一块,一开始我的后端代码是拿别人的套用的,但是它角色管理有点鸡肋,多了个角色等级。
-
靠角色等级来限制角色的行为,延申出来的问题就是,我们建立角色的时候需要考虑要给角色授权什么等级,什么接口和菜单权限,太麻烦了,本身角色管理就是可以管理任何角色,所以我干脆给它改造掉。
-
我的逻辑是,只要有角色管理员相关的权限,就可以直接控制角色授权,但是这样会不会权限太大,所以我给他套了了个权限范围:
-
不能修改自己的角色权限和状态,防止提权。
-
不能给别的角色授予超出自己拥有的权限以外的权限,同样防止利用给其他角色提权再让自己提权。
-
不能修改自己账户的权限,防止给自己加个 admin 的权限,给自己提权。
-
不能修改 admin 的权限。
-
admin 可以做所有事情,但是没对它自身做现在,所以操作要小心。
-
-
接下来看看有没有机会再对这个管理平台做一些集成,给他利用起来。