一步步实现微服务权限管理系统(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
接下来
前端引入角色管理,可编辑管理权限