基于Go+Vue实现的openLDAP后台管理项目。

1.缘起

我曾经经历的公司强依赖openLDAP来作为企业内部员工管理的平台,并通过openLDAP进行各平台的认证打通工作。
但成也萧何败也萧何,给运维省力的同时,ldap又是维护不够友好的。
他说他对ldap又爱又恨,因为ldap出现的最早,许多的三方软件都兼容支持它,它成了这方面的一个标准。但问题在于,它对于维护者而言,又是复杂麻烦的。就算是有Phpldapadmin这样的平台能够在浏览器维护,但看到那样上古的界面,以及复杂的交互逻辑,仍旧能够把不少人劝退。
鉴于此,我开发了这个现代化的openLDAP管理后台。

2.在线体验

admin / 123456
演示地址:http://demo-go-ldap-admin.eryajf.net[2]

3.项目地址

分类 GitHub Gitee
后端 https://github.com/eryajf-world/go-ldap-admin.git https://gitee.com/eryajf-world/go-ldap-admin.git
前端 https://github.com/eryajf-world/go-ldap-admin-ui.git https://gitee.com/eryajf-world/go-ldap-admin-ui.git

4.核心功能

  • 基于 GIN WEB API 框架,基于Casbin的 RBAC 访问控制模型,JWT 认证,Validator 参数校验
  • 基于 GORM 的数据库存储
  • 基于 go-ldap 库的主逻辑交互
  • 用户管理
    • 用户的增删改查
  • 分组管理
    • 分组的增删改查
    • 分组内成员的管理

      5.快速开始

      你可以通过docker-compose在本地快速拉起进行体验。
      快速拉起的容器包括:MySQL-5.7,openLDAP-1.4.0,phpldapadmin-0.9.0,go-ldap-admin。
      服务端口映射如下:
Service Port
MySQL 3307:3306
openLDAP 389:389
phpldapadmin 8091:80
go-ldap-admin 8090:80,8888:8888

拉起之前确认是否有与本地端口冲突的情况。

  1. $ git clone https://github.com/eryajf-world/go-ldap-admin.git
  2. $ cd docs/docker-compose
  3. $ docker-compose up -d

当看到容器都正常运行之后,可以在本地访问:http://localhost:8090,用户名/密码:admin/123456

6.本地开发

前言准备

前提是已准备好MySQL与openLDAP,本地开发建议直接通过docker拉起即可,可参考文档:https://wiki.eryajf.net/pages/3a0d5f[3]

拉取代码

  1. # 后端代码
  2. $ git clone https://github.com/eryajf-world/go-ldap-admin.git
  3. # 前端代码
  4. $ git clone https://github.com/eryajf-world/go-ldap-admin-ui.git

后端目录结构:

  1. ├─config # viper读取配置
  2. ├─controller # controller层,响应路由请求的方法
  3. ├─docs # 一些物料信息
  4. ├─logic # 主要的处理逻辑
  5. ├─middleware # 中间件
  6. ├─model # 结构体模型
  7. ├─public # 一些公共的,工具类的放在这里
  8. ├─routes # 所有路由
  9. ├─service # 整合与底层存储交互的方法
  10. ├─svc # 定义入参出参的结构体
  11. └─test # 跑测试用的

更改配置

  1. # 修改后端配置
  2. $ cd go-ldap-admin
  3. # 文件路径 config.yml
  4. $ vim config.yml
  5. # 根据自己本地的情况,调整数据库以及openLDAP的配置信息。

启动服务

  1. # 启动后端
  2. $ cd go-ldap-admin
  3. $ go mod tidy
  4. $ go run main.go
  5. $ make run
  6. # 启动前端
  7. $ cd go-ldap-admin-ui
  8. $ yarn
  9. $ yarn dev

本地访问:http://localhost:8090,用户名/密码:admin/密码是配置文件中openLDAP中admin的密码。

7.生产部署

生产环境单独部署,通过Nginx代理服务,配置如下:

  1. server {
  2. listen 80;
  3. server_name go-ldap-admin.eryajf.net;
  4. root /data/www/web/dist;
  5. location / {
  6. try_files $uri $uri/ /index.html;
  7. add_header Cache-Control 'no-store';
  8. }
  9. location /api/ {
  10. proxy_set_header Host $http_host;
  11. proxy_set_header X-Real-IP $remote_addr;
  12. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13. proxy_set_header X-Forwarded-Proto $scheme;
  14. proxy_pass http://127.0.0.1:8888;
  15. }
  16. }

8.感谢

感谢如下优秀的项目,没有这些项目,不可能会有go-ldap-admin:

  • 后端技术栈
    • Gin-v1.6.3[4]
    • Gorm-v1.20.12[5]
    • Go-ldap-v3.4.2[6]
    • Casbin-v2.22.0[7]
  • 前端技术栈
    • element-ui[8]
    • axios[9]
  • 另外感谢
    • go-web-mini[10]:项目基于该项目重构而成,感谢作者的付出。

参考资料
[1]
godap: https://github.com/bradleypeabody/godap
[2]
http://demo-go-ldap-admin.eryajf.net: http://demo-go-ldap-admin.eryajf.net
[3]
https://wiki.eryajf.net/pages/3a0d5f: https://wiki.eryajf.net/pages/3a0d5f
[4]
Gin-v1.6.3: https://github.com/gin-gonic/gin
[5]
Gorm-v1.20.12: https://github.com/go-gorm/gorm
[6]
Go-ldap-v3.4.2: https://github.com/go-ldap/ldap
[7]
Casbin-v2.22.0: https://github.com/casbin/casbin
[8]
element-ui: https://github.com/ElemeFE/element
[9]
axios: https://github.com/axios/axios
[10]
go-web-mini: https://github.com/gnimli/go-web-mini

https://mp.weixin.qq.com/s/wMgVDJ_cTJ6dOIUjpdvTxQ