Skip to content

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

前言

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

本节概述

  • casbin 规则文件持久化
  • casbin 没有对应的 go-zero 的orm模型适配器, 而 go-zero 的orm框架调用了 database/sql, 可以用github.com/Blank-Xu/sql-adapter 来实现

后端修改

引入adpater

  • user-api/internal/svc/servicecontext.go
conn := sqlx.NewMysql(c.Dsn)
db, err := conn.RawDB()
if err != nil {
    logx.Errorf("Error on conn.RawDB: %+v", err)
    return nil
}
policy, err := sqladapter.NewAdapter(db, "mysql", "casbin_rule")
if err != nil {
    logx.Errorf("Error on sqladapter.NewAdapter: %+v", err)
    return nil
}
enforcer, err := casbin.NewSyncedEnforcer(c.Casbin.ModelFile, policy)
if err != nil {
    logx.Errorf("Error on casbin.NewSyncedEnforcer: %+v", err)
    return nil
}
  • 启动后端,然后插入策略文件
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('p','1000000','/permission','get','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('p','1010000','/permission/page/index','get','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('p','1020000','/permission/button','get','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('p','1020100','/permission/button/router','get','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('p','1020200','/permission/button/login','get','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('g','permission:btn:add','1020100','','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('g','permission:btn:edit','1020100','','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('g','permission:btn:delete','1020100','','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('g','common','1000000','','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('g','common','1020000','','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('g','common','permission:btn:add','','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('g','common','permission:btn:edit','','','','');
insert  into `casbin_rule`(`p_type`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) values ('g','common','1020200','','','','');

测试

  • 前后端测试,通过

添加一行策略测试

user-api/internal/svc/servicecontext.go

// 测试完清空此内容
enforcer.AddPolicy("10086", "/10086", "get")

可以看的启动后端后,数据库多了一行记录

其他操作

policy 持久化到数据库中了,不需要原始文件及相关操作了

  • 删除 casbin.csv 文件
  • 删除 user-api/etc/user-api.yaml 相关配置信息
  • 删除 user-api/internal/config/config.go 相关配置信息

tag版本

purezeroadmin 项目下

git checkout v1.9.0

接下来

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

Comments